堆分配结构的初始化程序列表
问题描述:
我有一个Visual Studio 2008 C++项目,我希望堆分配一个结构并使用初始化程序列表进行初始化。堆分配结构的初始化程序列表
class Foo {
public:
explicit Foo(int a);
};
struct Bar {
Foo foo;
int b;
};
Bar a = Bar { Foo(1), 2 }; // Works!
Bar* b = new Bar{ Foo(1), 2 }; // Errors!
有没有办法做到这一点?
答
C++ 11允许它或类似的东西。既然你使用VC 2008, 然而,这不会帮助你。我所知道的唯一的解决方案是创建一个初始化 本地实例,然后通过这个:
Bar forInitialization = { Foo(1), 2 };
Bar* b = new Bar(forInitialization);
答
尝试
Bar* b = new Bar({ Foo(1), 2 });
Disclamer:只与GCC -std=c++0x
测试。
答
尝试增加一个构造函数来你的结构,当new
调用
为什么不添加一个构造函数来'Bar'接受所需的值它会被称为? – 2012-03-16 14:06:33
@Joachim - 我可能最终会这样做,但我想先验证它是否有必要。我讨厌当我最终做更多的工作,因为我错过了一些简单的语言功能。 – PaulH 2012-03-16 14:18:01
在你的结构中放置一个构造函数。 – shihongzhi 2012-03-16 14:20:47