使用new分配的数组是否可以使用初始化程序?

时间:2011-07-16 12:08:53

标签: c++ dynamic-arrays

在我正在阅读的书中(来自Herbert Schildt的 C ++ Complete Reference ),它说没有使用new分配的数组可以有一个初始化器。

我不能使用new初始化动态分配的数组吗?如果不是什么原因呢?

3 个答案:

答案 0 :(得分:18)

这不太正确(你几乎肯定会给自己一个替代参考),你被允许一个空的初始化器(()),它将值初始化阵列但是,你使用数组new时,无法单独初始化数组元素。 (见ISO / IEC 14882:2003 5.3.4 [expr.new] / 15)

E.g。

int* p = new int[5](); // array initialized to all zero
int* q = new int[5];   // array elements all have indeterminate value

没有根本原因不允许更复杂的初始化程序,只是因为C ++ 03没有语法结构。在下一个C ++版本中,您将能够做到这一点。

int* p = new int[5] {0, 1, 2, 3, 4};

答案 1 :(得分:0)

这本书是对的;你不能拥有,

int *p = new int[3](100);

背后没有可以理解的理由。这就是为什么我们在C ++ 0x中有数组的初始化器。

答案 2 :(得分:0)

我认为这本书是正确的,通常你不能用当前版本的c ++做到这一点。 但你可以用boost :: assign来实现动态数组,见下文

#include <boost/assign/list_of.hpp>
class Object{
public:
    Object(int i):m_data(i){}
private:
    int m_data;
};

int main()
{
    using namespace boost::assign;
    std::vector<Object> myvec = list_of(Object(1))(Object(2))(Object(3));
}