對象的賦值與複製: 賦值:通過“ = ”運算子多載
User a(10),b;
b = a;
複製:調用複製建構函式
User b;
User a(b);
或者
User a = b;//相當於User a(b);
與賦值的區別,賦值是對一個已經存在的對象進行賦值(已經實現定義了被賦值的對象),而複製是從無到有建立一個新的對象,並使它與已有的對象相同。
淺複製與深複製: 若對象中有指標成員,在複製時,只會將該指標成員的地址複製給建立立的對象,因此,兩個對象中的指標成員都指向了同一塊記憶體地區,在釋放時會出現重複釋放的問題。 需要手動定義複製建構函式,在建構函式中將為指標變數分配新的記憶體,是不同對象的指標成員指向不同的記憶體地區。
用到拷貝建構函式的三種情況: 1、需要建立一個新對象,並用另一個同類對象對其進行初始化 2、函數的參數為類的對象時,在調用函數時需要建立一個實參的拷貝,按實參複製一個形參,系統是通過調用拷貝建構函式實現的 3、函數的傳回值是類的對象:函數調用結束時,需要將函數中的對象複製一個臨時對象,並傳給該函數的調用處。
複製代碼 代碼如下:
User getUser()
{
User temp;
return temp;
}
int main()
{
User user = getUser();//調用getUser();
}
getUser()函數調用結束時,getUser中建立的對象temp的生命週期結束(即將銷毀),所以不是將temp帶回main,而是在執行return語句時,調用User類的拷貝建構函式,按temp拷貝一個新的、對象,然後將它賦值給user.
http://www.bkjia.com/PHPjc/325801.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/325801.htmlTechArticle對象的賦值與複製: 賦值:通過“ = ”運算子多載 User a(10),b; b = a; 複製:調用複製建構函式 User b; User a(b); 或者 User a = b;//相當於User a(b);...