C 拷貝建構函式

2022-11-24 10:55:10 字數 694 閱讀 1930

1樓:匿名使用者

person p1("randy");

person p2(p1);

這兩個語句在作怪.

1 person p1("randy");執行時呼叫person(char* pn);此建構函式,分配空間給p1,並完成字串的拷貝.(至此p1已經不再是空了.p1.

pname!=null)

2 person p2(p1);語句執行時呼叫person(const person&);這個比較奇怪吧?這個函式叫複製建構函式,發生在用另一個物件來構造新物件.你沒有定義,那麼系統就會偷偷的給你合成一個預設的.

預設的複製建構函式就是簡單的拷貝源物件中的各個欄位的值(p1.pname),這樣構造出的p2就會有自己的p2.pname,這個指標的值就是p1.

pname的值.所以你輸出的時候顯示了同樣的內容.

3 如果有條件建議你看看<> 複製控制那一章

2樓:匿名使用者

關於if(pname):

因為分配記憶體不一定會分配成功,雖然概率很小if(pname)

delete pname;

pname=new char[strlen(pn)+1];

if(pname) strcpy(pname,pn);

這個意思是如果原來存在陣列的話就刪除,然後開闢一個新的空間,如果不刪除就會有記憶體垃圾.

c 中的拷貝建構函式的問題,c 拷貝建構函式的問題

拷貝建構函式多被用來實現類物件的深拷貝。例如 class a 不定義拷貝建構函式時,你如果對兩個物件賦值,就會是淺拷貝,即 簡單的成員變數相等。a a,b a b 則,相當於作了a.p b.p,a,b的p指標指向了同一個地址,但是資料並沒有拷貝一份,這叫做淺拷貝。所以定義拷貝建構函式 a a a 然...

c 拷貝建構函式問題

從c 的角度說,引用就是個物件別名,當外部物件 實參 傳入函式時,為物件取了個別名 形參 沒有做記憶體分配工作,因而也沒做物件複製工作,所以引用呼叫函式效率最高。而實質上引用其實傳入的是地址 注意別和傳遞指標變數混淆 只是在函式體內將該地址按物件來操作,把他看做函式內定義的一個物件。請參考 incl...

C怎麼用建構函式來傳值,c 如何用建構函式來傳遞引數

public form1 string value c 如何用建構函式來傳遞引數 例如你的主窗體中有一個按鈕,在他的單擊事件裡寫入 f3 f new f3 this.textbox1.text f.show this.hide 在f3的窗體 中寫入 private string texts publ...