不知不覺中呼叫的預設拷貝建構函式

2021-04-07 12:19:50 字數 1128 閱讀 4413

大家都知道在乙個物件的賦值過程中就會呼叫預設的拷貝

建構函式(如果你沒有明確定義這部分**的情況下),這

時在你的類的設計過程中有乙個指標成員變數,這時可能就

可能潛在一定的危險在裡邊。在這裡舉個例子來說明以下:

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 返回值賦值和返回值的使用往往會進行編譯器的優化,例如 下面的呼叫中,只會呼叫兩次建構函式 一次是預設建構函式,另外一次是自動拷貝建構函...