拷貝構造與過載賦值運算子

2021-10-07 11:20:47 字數 617 閱讀 8574

編譯器預設的拷貝建構函式,發生的是memberwise initialization(成員逐一初始化),類的成員變數被逐一複製。而預設賦值運算子,也是逐一複製成員變數。

一旦成員變數中,有程式設計師在heap開闢的空間(指標,new),使用預設拷貝建構函式就會引起淺拷貝和深拷貝的問題。

#include using namespace std;

class matrix

matrix(const matrix& rhs):_row(rhs._row),_col(rhs._col)

matrix& operator=(const matrix &rhs);

~matrix()

private:

int _row, _col;

double * _pmat;

};matrix& matrix::operator=(const matrix& rhs)

return *this;

}

與拷貝建構函式的初始化功能不同,呼叫過載的賦值運算子時,類本身已經被初始化過了。所以需要先確定兩個物件是否相同,然後刪除原先開闢的空間。

拷貝構造與賦值運算子過載(順序)

other l類型別 找到合適的建構函式生成該類的物件 如果找不到例項化物件失敗 隱式呼叫建構函式 顯示呼叫函式 無名物件 零時物件 賦值運算子過載函式 分為3步 第一步 判斷是不是自身賦值 防止失敗出錯 第二步 釋放this指標所指的 外部 空間的大小 第三步重新分配空間 拷貝資料 物件的生存週期...

拷貝建構函式與賦值運算子過載

拷貝建構函式 只有單個形參,該形參是對本類型別物件的引用 一般常用const修飾 在用已存在的類型別物件建立新物件時由編譯器自動呼叫。1.拷貝建構函式是建構函式的乙個過載形式 class date date const date d private int year int month int da...

拷貝建構函式與過載賦值運算子

注意 該作者部落格已遷移至 如果乙個建構函式的第乙個引數是自身類型別的引用,且任何額外的引數都有預設值,則此建構函式是拷貝建構函式。c premier裡的定義 拷貝建構函式應用的場景 預設拷貝建構函式 class ctest ctest void test ctest obj intmain 這個程...