2014-03-06 36 views
4

假設我有一個C++類這樣的:如何初始化指向nullptr的指針聯合?

class Container 
{ 
private: 
    union { 
    Foo* foo; 
    Bar* bar; 
    } mPtr; 
}; 

這個類將在堆棧上構成。即它不會被new編輯,所以我不能只聲明一個歸零operator new

我可以使用構造函數中的初始值設定器來設置mPtrnullptr莫名其妙嗎?

Container() 
: mPtr(nullptr) 
{ 
} 

不能編譯。甚至沒有添加nullptr_t類型的虛擬union成員。

Container() 
: mPtr.foo(nullptr) 
{ 
} 

也不編譯。

+0

嘗試':mPtr(NULL)',您還可以定義聯合的構造函數。爲此,它必須通過AFAIK命名 – Paranaix

回答

10

使用集合初始化,例如:

Container() : mPtr { nullptr } 
{ } 

我通常不喜歡張貼鏈接,但here是一個良好的運行,通過這一技術的。

0

取決於您使用的編譯器。這應該可以,但VS 2013不支持它。然而

Container(): mPtr{nullptr} 
{ 
} 

這並不工作:

union { 
    int* foo {nullptr}; 
    double* bar; 
} mPtr; 
0

只是默認,其初始化。

Container() 
: mPtr() 
{ 
}