2014-03-06 41 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() 
{ 
}