賦值運算子和複製建構函式的區別
阿新 • • 發佈:2019-01-23
賦值運算子和複製建構函式都是用已存在的B物件來建立另一個物件A。不同之處在於:賦值運算子處理兩個已有物件,即賦值前B應該是存在的;複製建構函式是生成一個全新的物件,即呼叫複製建構函式之前A不存在。
CTemp a(b); //複製建構函式,C++風格的初始化
CTemp a=b; //仍然是複製建構函式,不過這種風格只是為了與C相容,與上面的效果一樣
在這之前a不存在,或者說還未構造好。
CTemp a;
a=b; //賦值運算子
在這之前a已經通過預設建構函式構造完成。
例項總結:
重點:包含動態分配成員的類 應提供拷貝建構函式,並重載"="賦值操作符。
以下討論中將用到的例子:
class CExample
{
public:
CExample(){pBuffer=NULL; nSize=0;}
~CExample(){delete pBuffer;}
void Init(int n){ pBuffer=new char[n]; nSize=n;}
private:
char *pBuffer; //類的物件中包含指標,指向動態分配的記憶體資源
int nSize;
};
這個類的主要特點是包含指向其他資源的指標。
pBuffer指向堆中分配的一段記憶體空間。
引用:http://www.cnblogs.com/fairycao/archive/2009/12/16/1625408.html