試了下c++11的unique_ptr,發現有個有意思的現象,看如下**:
int* a=new int(3);
int* b=new int(4);
unique_ptrua();
unique_ptrub(b);
ua=nullptr;
ua=move(ub);
編譯居然不通過,一開始莫名其妙,看了編譯error資訊:
error: cannot convert 『std::nullptr_t』 to 『std::unique_ptr()』 in assignment
error: assignment of function 『std::unique_ptrua()』
原來ua被編譯器當做乙個function,稍微一改:
int* a=new int(3);
int* b=new int(4);
unique_ptrua(nullptr);//or unique_ptrua;
unique_ptrub(b);
ua=nullptr;
ua=move(ub);
就ok了
預設建構函式和合成預設建構函式
當我們沒有為類中的物件提供初始值,此時就會執行預設初始化,類會通過乙個特殊的建構函式來控制預設初始化過程,這個函式叫做預設建構函式,這個函式並不需要任何的實參,但是如果我們的類沒有顯式地定義建構函式,那麼編譯器就會為我們隱式地定義乙個預設建構函式 只要沒有顯式定義建構函式,編譯器就會提供預設建構函式...
預設建構函式
只要定義乙個物件時沒有提供初始化式,就使用預設建構函式。為所有形參提供預設實參的建構函式也定義了預設建構函式。乙個類哪怕只定義了乙個建構函式,編譯器也不會再生成預設建構函式。這條規則的根據是,如果乙個類在某種情況下需要控制物件初始化,則該類很可能在所有情況下都需要控制。合成的預設建構函式 synth...
預設建構函式
原諒我是個菜鳥,總在些小地方不經意出錯。include using namespace std class x x x private int a int main 你是否看得出 出錯了呢?接下來讓我們編譯看看 constructfunc.cpp in function int main const...