侯捷 貳 帶指標的string

2021-09-13 11:30:33 字數 1171 閱讀 6405

1,拷貝構造,拷貝賦值(copy op=)

2,如果物件中含有指標,賦值之後多個指標會指向同乙個物件,誰來改,誰要用?形成別名的情形,比較危險。

3,字串的長度統計實際:

1)前面記錄乙個長度

2)末尾以乙個『/0』作為結束符

4,帶指標的類:拷貝過程一定要手動改寫,保證每乙個人有自己的空間,而不是共用一塊空間。

5,檢查自我賦值是必要的,可能會發生不確定的行為。

6,所謂的stack 和所謂的heap

complex c1(1,2);//函式所在的stack中,離開函式就會釋放空間

complex *p=new complex(8);//動態取得,有責任去手動delete掉

delete p;//預設呼叫析構函式

stack的生命週期:離開作用域scope就會被釋放。

static物件,不受作用域影響,直到整個程式結束被釋放。

全域性物件,在所有的scopes之外,直到程式結束才被釋放。

7,記憶體洩漏:找不到內存在**,也無法操作它

8, new------->

1)呼叫melloc(n)分配空間得到void* mem;

2)將指標轉型為具體類的指標pc=static_cast(mem);

3)呼叫建構函式complex::complex(pc,1,2);

9,delete---->

1)呼叫析構函式(釋放字串在heap中的內容)

2)釋放記憶體(釋放字串本身那個指標的空間)

10,在vc中的複數分配過程:

除錯下;乙個cookie是四個位元組,中間有你要的你要的八個位元組(兩個double),也有其他的除錯資訊。--》8+(32+4)_debug+2*4cookie+padding(填補)--》十六的倍數-》64

非除錯下:(最小)兩個cookie+8=16---》最後一位為1表示os分出去了

00000011------00000011(十六進製制)

特別的:

對於string--》兩個cookie+4=12---》十六倍數--》16(一次分配了16個位元組)

11,array delete =: delete 多次呼叫析構函式,如果沒有中括號便只有一次釋放過程

侯捷的職業建議

阮一峰 發表於 2008年05月27日 分類 首頁 檔案 it技術 前幾天,我不知為何突然想起了侯捷,很想知道這幾年他在幹什麼。網上一查,他的官方 jjhou.com已經關了,大陸的簡體映象倒是還在,但是最後更新日期為2005年10月19日,看上去關閉也只是時間問題了。從搜尋到的一些新聞來看,他依然...

C 侯捷 虛指標和虛表動態繫結

繼承和組合中構造和析構,可以通過記憶體的角度進行分析。繼承關係是構造父類被包含在子類中,所以構造必須由內而外,析構方向相反。組合關係是擁有的關係,建構函式也是由內而外,析構方向相反。繼承和組合的構造 析構函式後面編譯器會加上父類的建構函式 container container component ...

侯捷C 第九課String類實現的複習

class string private char m data 考慮到字串長度不等,選用指標 用動態分配記憶體的方法。再次考慮 1.傳入引數是否需要傳入引用?優先考慮傳入引用的情況。2.傳入引數值是否需要改變?不變加上const。3.函式返回型別是否能返回應用?如果返回引數不是在函式內部另外產生的...