1樓:同樹菅鴻風
在c++中,下面三種物件需要呼叫拷貝建構函式(有時也稱「複製建構函式」):
1)一個物件作為函式引數,以值傳遞的方式傳入函式體;
2)一個物件作為函式返回值,以值傳遞的方式從函式返回;
3)一個物件用於給另外一個物件進行初始化(常稱為賦值初始化);
如果在前兩種情況不使用拷貝建構函式的時候,就會導致一個指標指向已經被刪除的記憶體空間。對於第三種情況來說,初始化和賦值的不同含義是拷貝建構函式呼叫的原因。事實上,拷貝建構函式是由普通建構函式和賦值操作符共同實現的。
描述拷貝建構函式和賦值運算子的異同的參考資料有很多。
通常的原則是:①對於凡是包含動態分配成員或包含指標成員的類都應該提供拷貝建構函式;②在提供拷貝建構函式的同時,還應該考慮過載"="賦值操作符號。
拷貝建構函式,又稱複製建構函式,是一種特殊的建構函式,它由編譯器呼叫來完成一些基於同一類的其他物件的構建及初始化。其唯一的形參必須是引用,但並不限制為const,一般普遍的會加上const限制。此函式經常用在函式呼叫時使用者定義型別的值傳遞及返回。
拷貝建構函式要呼叫基類的拷貝建構函式和成員函式。如果可以的話,它將用常量方式呼叫,另外,也可以用非常量方式呼叫。
2樓:力達檀依珊
要看你是否需要進行深度複製,如果需要進行深度複製,那麼就需要自己提供拷貝建構函式進行深度複製。
編譯器提供的拷貝建構函式只進行淺複製。
3樓:
拷貝建構函式是用該型別的另外一個例項化的物件來初始化一個新建的物件,c++中拷貝建構函式有三種用途:
1) 一個物件以值傳遞的方式傳入函式體;
2) 一個物件以值傳遞的方式從函式返回;
3) 一個物件需要通過另外一個物件進行初始化;
能不能幫忙寫一下c類的建構函式拷貝建構函式
class test test test void test test test item 拷貝this data new char itemlen p this data q item.data while itemlen p q return void test operator test it...
建構函式的呼叫順序,建構函式和解構函式呼叫的順序
構造 塊的作用同樣是給物件進行初始化。物件一建立就執行構造 塊了,而且優先於建構函式執行。這裡要強調一下,有物件建立,才會執行構造 塊,類不能呼叫構造 塊的,而且構造 塊與建構函式的執行順序是前者先於後者執行。構造 塊與建構函式的區別是 構造 塊是給所有物件進行統一初始化,而建構函式是給對應的物件初...
解構函式與建構函式有什麼區別,建構函式和預設建構函式有什麼區別
1 概念不同 解構函式 物件所在的函式已呼叫完畢時,系統自動執行解構函式。建構函式 是一種特殊的方法。特別的一個類可以有多個建構函式 可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載。2 作用不同 解構函式 解構函式被呼叫。建構函式 為物件成員變數賦初始值 3 目的不同 解構函式 ...