如何初始化指向nullptr的指针联合?

时间:2014-03-06 13:34:40

标签: c++ unions

假设我有一个像这样的C ++类:

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

这个类将在堆栈上构建。即它不会被new编辑,所以我不能只声明归零operator new

我可以在构造函数中使用初始化程序以某种方式将mPtr设置为nullptr吗?

Container()
 : mPtr(nullptr)
{
}

无法编译。甚至没有添加union类型的虚拟nullptr_t成员。

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

也无法编译。

3 个答案:

答案 0 :(得分:10)

使用聚合初始化,例如:

Container() : mPtr { nullptr }
{ }

我通常不喜欢发布链接,但here是这项技术的良好运行。

答案 1 :(得分:0)

取决于您使用的编译器。这应该有效,但VS 2013不支持它。

Container(): mPtr{nullptr}
{
}

但这确实有效:

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

答案 2 :(得分:0)

只需默认初始化它。

Container()
 : mPtr()
{
}