unique ptr預設構造,小發現

2021-07-02 01:34:41 字數 609 閱讀 3941

試了下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...