1. 程式人生 > >條款5:了解C++默默編寫並調用哪些函數

條款5:了解C++默默編寫並調用哪些函數

clas 構造函數 ase 析構 copy const per 賦值操作符 opera

當寫下如下空類時: class Empty{}; 編譯器處理後變成; class Empty { public: Empty() {}//默認構造函數 Empty(const Empty&) {}//默認拷貝構造函數 ~Empty(){}//默認析構函數 Empty& operator=(const Empty&) {}//默認賦值操作符 }; 編譯器產出的析構函數是一個non-virtual版本,除非這個class的base class自身聲明有virtual析構函數。 編譯器產出copy構造函數和copy assignment操作符,只是單純地將來源於對象的每一個non-static成員變量拷貝到目標對象中。 特別:當如下兩個條件之一不符合,編譯器會拒絕產出operator= 1.如果class內含referenc或者const成員,必須自己定義copy assignment操作符。 2.如果某個base class將copy assignment操作符聲明為private,編譯器會拒絕給derived class生成copy assignment操作符。

條款5:了解C++默默編寫並調用哪些函數