c++類和動態記憶體分配
阿新 • • 發佈:2019-02-06
動態記憶體和類
特殊成員函式
1預設建構函式,如果你沒有定義建構函式 2預設的解構函式,如果你沒有定義解構函式 3複製建構函式,如果你沒有定義 4賦值運算子,如果你沒有定義 5地址運算子,如果你妹你沒有定義 1,2我們已經說說了,現在我們來說說後面的何時呼叫複製建構函式
包含一個自身類的引用的夠著函式就是複製建構函式A::A(const A&);
新建物件並將其初始化為同類現有物件,複製建構函式都會被呼叫(函式引數按值傳遞時也會呼叫)。現在我們來談談預設複製函式。
1複製建構函式按值傳遞時也可能被建立
2預設建構函式是逐個複製非靜態成員(成員複製也成為淺複製),複製的是成員的值。
比如物件中有有字串,當呼叫複製建構函式時就會賦值的是字串的地址而不是值。對於自動變數這沒有問題,但是如果是new,而且我們在解構函式中使用了delete,在解構函式被呼叫時,其中的字串就沒了。
class A{ private : char * testSting; int len; public : void A(const chat * s){ len=std::strlen(s); testString=new char[len+1]; std::strcpy(str,s); }; ~A(){ delete [] test } }
像上面那樣的話就會出現我所說的結果
賦值運算子
將一個物件賦值給另一個物件 要注意複製建構函式A a;
A B=a;
上面有可能建立一個物件將其初始化為a因此呼叫複製建構函式,也有可能用複製建構函式來穿件零食變數,之後用賦值運算子,初始化總會呼叫複製建構函式,而賦值運算子也有可能。還有一點就是賦值運算子也會出現複製建構函式那樣的問題