1. 程式人生 > >c++類和動態記憶體分配

c++類和動態記憶體分配

動態記憶體和類

特殊成員函式

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因此呼叫複製建構函式,也有可能用複製建構函式來穿件零食變數,之後用賦值運算子,初始化總會呼叫複製建構函式,而賦值運算子也有可能。還有一點就是賦值運算子也會出現複製建構函式那樣的問題

靜態成員函式

靜態成員函式,獨立於物件。用static 關鍵字和作用域解釋符 static int f();