堆分配结构的初始化列表

时间:2012-03-16 14:02:38

标签: c++ initializer-list

我有一个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!

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:2)

尝试

Bar* b = new Bar({ Foo( 1 ), 2 });

Disclamer:仅使用GCC -std=c++0x进行测试。

答案 1 :(得分:1)

C ++ 11允许它或类似的东西。既然你正在使用VC 2008, 但是,这对你没有帮助。我知道的唯一解决方案是创建一个 初始化本地实例,然后传递:

Bar forInitialization = { Foo( 1 ), 2 };
Bar* b = new Bar( forInitialization );

答案 2 :(得分:0)

尝试在结构中添加构造函数,在调用new时调用它