4

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

有没有办法做到这一点?

4

3 回答 3

2

尝试

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

免责声明:仅使用 GCC 进行测试-std=c++0x

于 2012-03-16T14:07:18.357 回答
2

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

Bar forInitialization = { Foo( 1 ), 2 };
Bar* b = new Bar( forInitialization );
于 2012-03-16T14:07:04.170 回答
0

尝试向你的结构添加一个构造函数,它会在被调用时new被调用

于 2012-03-16T14:09:25.573 回答