大家都知道在乙個物件的賦值過程中就會呼叫預設的拷貝
建構函式(如果你沒有明確定義這部分**的情況下),這
時在你的類的設計過程中有乙個指標成員變數,這時可能就
可能潛在一定的危險在裡邊。在這裡舉個例子來說明以下:
class test
~test(void)
private:
int *nindex;
};有的時候我們可能會這樣設計自己的**,在建構函式內
分配記憶體,在析構函式中釋放記憶體,看似沒有什麼問題,但
是在這個程式中潛在著危險。試想一下,我們這樣來使用這
個類:test test1;
test test2 = test1;
test test3;
test3 = test2;
在這裡,test的建構函式被呼叫了兩次(test1和test3),
而析構函式卻被呼叫了3次,test1,test2,test3各一次。
由於賦值的預設解釋是按成員賦值,所以在程式結束的時
候,test1,test2,test3中各包含乙個指標,他們都指向
test1構造時分配的那塊記憶體。在test3建立時分配的記憶體的
指標沒有被保留下來,被賦值語句覆蓋掉了(test3 = test2;),
這樣這塊記憶體就永遠丟掉了,也就出現了記憶體洩露。上面的3次
析構,預示著相同的記憶體要釋放3次,這種情況導致的結果是很
糟糕的。
知道上面的問題,以及問題的所在,我們就可以對它進行修
正,是程式按我們自己的方式去執行。既然是預設拷貝構造出的
問題,那我們就把它定義清楚:
class test
~test(void)
test(const test &t);
test& operator=(const test &t);
private:
int *nindex;
};inline test::test(const test &t)
inline test& test::operator=(const test &t)
return *this;
}進行上述修改後,我們就可以盡情地使用該類。在賦值時,
也不會出現意想不到的情況。
久違的知識在不知不覺中延續
這個部落格好久沒更新了,一方面是沒時間,另一方面是到了新單位工作後變得沒什麼激情寫部落格了。現在回來看看,這裡面自己原來寫的一些內容倒變得有點生疏,呵呵。無論如何感謝程式與我一起走過的那段難忘的 求索的日子。新的工作崗位原本與計算機技術沒有任何關係,我上崗之前的一段時間裡甚至覺得我將再也不會去觸碰本...
在應聘工作中,不知不覺的完成了乙個比較困難的小專案
在上個禮拜五,我去了一家公司面試,從面試的整個過程和交談溝通都不錯,公司環境也很好 是一家學外語做培訓資料的門戶站,想想大家應該知道的,在上海的 在面試結束後給我布製了兩個任務,乙個是聽寫校對專案,另乙個是 改進方案。起初我聽到這兩個專案時,感覺估計不會很難,就是在寫 改進方案上,由於貴公司的 構架...
C 構造拷貝構造的 N 中呼叫情況
1.總結 c 對傳參和傳返回值時構造的優化處理。1 c 形式引數型別和返回值型別如果是引用,那麼在傳遞時,會把實參或者返回值的引用自動賦值給形式引數 返回值 2 c 返回值賦值和返回值的使用往往會進行編譯器的優化,例如 下面的呼叫中,只會呼叫兩次建構函式 一次是預設建構函式,另外一次是自動拷貝建構函...