拷貝建構函式和賦值建構函式

2021-06-08 07:14:57 字數 804 閱讀 7880

class cmystring

;//賦值建構函式

cmystring& cmystring::operator = (const cmystring& str)

//新分配記憶體,將str的m_pdata記憶體拷貝到m_pdata中

m_pdata = new char[strlen(str.m_pdata) + 1];

strcpy(m_pdata, str.m_pdata);*/

//在這個函式中,我們定義乙個臨時例項strtemp,並把strtemp的m_pdata指向當前例項(*this)的m_pdata。

//由於strtemp是個區域性變數,但程式設計師執行到if的外面是也就出了的該變數的域,就會自動呼叫strtemp的析構函式,

//就會把strtemp.m_pdata所指向的記憶體釋放掉。由於strtemp.m_pdata指向的記憶體就是當前例項之前m_pdata的記憶體。

//這就相當於自動呼叫析構函式釋放當前例項的記憶體。如果新增加指標成員變數,

//我們只需要在析構函式裡正確地釋放,而不需要對賦值運算子函式做任何修改。

cmystring tempstr(str);

char* temp = tempstr.m_pdata;

tempstr.m_pdata = m_pdata;

m_pdata = temp;

}return *this;

}//拷貝建構函式

cmystring::cmystring(const cmystring& str)

cmystring::~cmystring(void)

}

拷貝建構函式和賦值建構函式

拷貝構造是確確實實構造乙個新的物件,並給新物件的私有成員賦上引數物件的私有成員的值,新構造的物件和引數物件位址是不一樣的,所以如果該類中有乙個私有成員是指向堆中某一塊記憶體,如果僅僅對該私有成員進行淺拷貝,那麼會出現多個指標指向堆中同一塊記憶體,這是會出現問題,如果那塊記憶體被釋放了,就會出現其他指...

拷貝建構函式和賦值構造

為什麼空類可以建立物件呢?複製建構函式的引數可以是 const 引用,也可以是非 const 引用。一般使用前者,這樣既能以常量物件 初始化後值不能改變的物件 作為引數,也能以非常量物件作為引數去初始化其他物件。乙個類中寫兩個複製建構函式,乙個的引數是 const 引用,另乙個的引數是非 const...

建構函式 拷貝建構函式 賦值建構函式

class和struct很大乙個區別在於,c除了成員的訪問控制許可權,struct中的成員預設是public,而class中的field預設是private class還有乙個special的地方是它有建構函式 constructor。建構函式是class中的一員,和成員變數 其他成員函式一起構成乙...