先來看這樣一段**:
class test
~test(void)
private:
int *p; };
正如我們平常使用一樣,在類的建構函式中new
指標,在析構函式中delete
指標。表面上看這段**沒有任何問題,實際上卻隱藏著很大的隱患。
當我們這樣使用上面的類時:
int main(void)
這裡test
的構造函式呼叫了兩次。t1
和t3而test
的析構函式卻呼叫了3
次。t1,t2,t3
。由於t1,t2,t3
分別包含乙個指標。他們的指向為t1
構造的時候分配的記憶體。
這樣就產生了狠嚴重的問題。 1.
t3構造時建立的記憶體沒有被儲存下來,這樣就造成了記憶體洩露。 2.
由於上面呼叫了析構函式3
次,也就是說,t1
建立的指標要釋放3
次。這樣就會出現很嚴重的問題。
好了,找到了問題,我們就知道如何來修改了。
class test
~test(void)
test(const test &t)
test& operator=(const test &t)
return *this; }
private:
int *p; };
如果這段**你理解的很透徹,那麼c++
中的4大函式你就已經完全掌握了。
test t;
呼叫建構函式。
test t1(t);
呼叫拷貝建構函式
test t2 = t1;
同樣呼叫拷貝建構函式
test t3;
t3 = t1;
這裡才是呼叫賦值函式
海綿寶寶幫你理解物件導向
物件導向 引例 製作乙個蟹黃堡 面向過程 放乙個麵餅 放一片生菜 放一片牛肉 放一片芝士 放乙個麵餅 物件導向 海綿寶寶.做蟹黃堡 引例 把大象放進冰箱裡 面向過程 開啟冰箱門 把大象放進去 關閉冰箱門 物件導向 人.開門 人.放入大象 人.關門 三大特徵 封裝 繼承 多型 封裝 封裝,就是把客觀事...
理解物件賦值給介面
所以說只實現介面的部分方法 實現該介面 那麼就不可以將物件賦值給該介面 package main import fmt type animal1 inte ce type animal2 inte ce type felid inte ce type cat struct func c cat sa...
C 物件賦值的四種方式
1.引用作為引數的方式傳遞.getobject object obj obj.value value1 特點 在外部構造乙個物件.把該物件以引用的方式傳遞到函式中.從而實現對該物件的改變,該引數實質是乙個 out 型別的引數,而非 in 型別的引數.這裡的引用可以稱為別名.點評 這種方式需要特別的注...