第13章 拷貝控制

2021-09-11 08:54:36 字數 927 閱讀 6880

拷貝建構函式

class foo ;
sales_data::sales_data(const sales_data &orig) : 

bookno(orig.bookno),

units_sold(orig.units_sold),

revenue(orig.revenue)

{}

拷貝賦值運算子
foo& operator=(const foo&);		//賦值運算子

sales_data& sales_data::operator=(const sales_data &rhs)

析構函式
class foo ;
三/五法則

使用=default

阻止拷貝

int i = 42;

int &&r = i * 42; //將r繫結到乘法結果上

變數是左值
int &&rr1 = 42;	//正確:字面常量是右值

int &&rr2 = rr1; //錯誤:表示式rr1是左值

標準庫move函式
int &&rr3 = std::move(rr1);	//ok
移動建構函式與移動賦值運算子
strvec::strvec(strvec &&s) noexcept	//移動建構函式不應丟擲任何異常 

: elements(s.element), first_free(s.first_free), cap(s.cap)

strvec &strvec::operator=(strvec &&rhs) noexcept 

return *this;

}

第13章 拷貝控制

拷貝構造的第乙個引數是自身類型別的引用,且任何額外引數都有預設值,成為拷貝建構函式。拷貝建構函式通常不應該是explicit,可以接受非const引用。class foo 合成拷貝建構函式 編譯器會自動合成拷貝建構函式。一般情況中,合成的拷貝建構函式會將其引數的成員逐個拷貝到正在建立的物件中。編譯器...

13章,拷貝控制

ex1 1,拷貝建構函式的定義 乙個建構函式的第乙個引數是自身型別的引用,且任何額外引數都有預設值。2,出現場合 ex2 拷貝建構函式自己的引數必須是引用型別。因為如果不是的話,在呼叫拷貝建構函式時,將乙個物件作為實參傳遞給乙個非引用型別的形參時,會再次呼叫該拷貝建構函式陷入死迴圈。ex5haspt...

第13章 複製控制

複製建構函式 賦值操作符和析構函式總稱為複製控制 copy control 複製建構函式可用於 1 根據另乙個同型別的物件顯式或隱式初始化乙個物件 2 複製乙個物件,將它作為實參傳給乙個函式 3 從函式返回時複製乙個物件 4 初始化順序容器中的元素,如vectorsev 5 分別用了預設建構函式和複...