为什么我不能用c ++中的new调用参数化构造函数?

时间:2011-02-21 20:41:54

标签: c++ arrays dynamic-memory-allocation

如果你知道这个问题,

假设我有一个其CTOR接收整数的A类;

我无法做到以下几点:

A* arr = new A[3](A(2), A(3), A(5));

或者初始化数组的几个成员的任何其他方式。 我读到了,这是不可能的。

我的问题是为什么,我为什么要这样做

A arr[3] = {A(1), A(2), A(3)};

但我不能做到以上?记忆方式或其他。

非常感谢!

2 个答案:

答案 0 :(得分:9)

在当前标准C ++(称为C ++ 03)中无法执行此操作的原因是历史性的。这将在即将推出的C ++标准中进行清理(目前预计将在今年发布,这将使其成为C ++ 11),这将引入所谓的“统一初始化语法”。

根据Stroustrup's C++0x FAQ,您可以写

A* p = new A[3] {A(1), A(2), A(3)};

你的编译器实际上已经很有可能支持这个了。

答案 1 :(得分:0)

我相信你正在尝试进行“统一初始化”,它包含在C ++ 0x中。我不明白为什么初始化列表使用A(int)部分,我只是这样做(这是C ++ 98/03接受的:

A arr[3] = {1, 2, 3};