c++在定義類的時候,如果我們沒有手動定義拷貝建構函式,系統會有乙個預設拷貝建構函式,此拷貝建構函式為淺拷貝。那什麼是拷貝建構函式呢?它的形式如下:
a(a &a){}
其中a為類名。我們經常見到類似
a b=new a(a);
形式的語句,拷貝建構函式就是用在這裡來為新建立的物件b用已經存在的物件a初始化的。一般情況下使用預設的拷貝建構函式即可,然而當類中有指標變數時,需要手動定義深拷貝建構函式以保證使用中因a物件的指標變數空間釋放造成b物件中該指標變數的繼續使用。以下為乙個深拷貝例子:
// a.hpp
#ifndef a_hpp
#define a_hpp
#include "iostream"
class a ;
#endif /* a_hpp */
// a.cpp
#include "a.hpp"
using namespace std;
int a::getnum()
void a::setnum(int n)
void a::setname(char* s)
程式中標識注釋的語句即為自定義的深拷貝建構函式,採用這一方式時,a1的賦值將不會影響a2的輸出,將其注釋掉則a1的賦值將影響到a2的輸出,即採用預設拷貝建構函式。
拷貝建構函式,深拷貝與淺拷貝
一.拷貝建構函式 先直接來看 include include help.h using namespace std class line private char msg line line const char msg line line const line line line line voi...
拷貝建構函式淺拷貝深拷貝
1 函式的引數為類物件且引數採用值傳遞方式 2 將類物件做為函式的返回值。2.淺拷貝 所謂淺拷貝,指的是在物件複製時,只對物件中的資料成員進行簡單的賦值 預設拷貝建構函式執行的也是淺拷貝。大多情況下 淺拷貝 已經能很好地 工作了,但是一旦物件存在了動態成員,那麼淺拷貝就會出問題了,讓我們考慮如下一段...
拷貝建構函式,深拷貝,淺拷貝
深淺拷貝的區別 淺拷貝是將原始物件中的資料型字段拷貝到新物件中去,將引用型字段的 引用 複製到新物件中去,不把 引用的物件 複製進去,所以原始物件和新物件引用同一物件 新物件中的引用型字段發生變化會導致原始物件中的對應欄位也發生變化。line line const line obj 深拷貝是在引用方...