1. 程式人生 > >讀書筆記《Effective c++》 條款05 瞭解c++默默編寫並呼叫哪些函式

讀書筆記《Effective c++》 條款05 瞭解c++默默編寫並呼叫哪些函式

編譯器會案子為class建立default建構函式、copy建構函式、copy assignment操作符,以及解構函式。

但是,如果此類的成員型別會導致編譯器比較難以理解生成建構函式的樣子的時候,編譯器會拒絕為其生成預設的成員函式。例如:

class Test
{
private:
	std::string& nameValue;
	const int objectValue;
};
對於nameValue,c++規定引用是不能修改他指向的物件的,所以c++不知道在賦值建構函式中怎麼處理這個成員,所以編譯器乾脆什麼也不錯,不再生成預設的賦值建構函式。

同樣,對於objectValue,常量並不能被賦值,所以編譯器行為同上。

還有一種情況:如果base class將賦值建構函式宣告為private,那麼編譯器也不能為derived class生成賦值建構函式。

因為編譯器在生成derived class的賦值建構函式的時候需要呼叫base class的賦值建構函式來處理base class的成員,而顯然,編譯器並不能呼叫private函式。