如何使`new []`default-initialize原始类型数组?

sha*_*oth 23 c++ arrays initialization

我不时需要调用new[]内置类型(通常char).结果是一个具有未初始化值的数组,我必须使用memset()std::fill()初始化元素.

如何进行new[]默认初始化元素?

sbi*_*sbi 32

int* p = new int[10]() 应该做.

然而,正如迈克尔指出的那样,使用std::vector会更好.

  • 您还可以使用c ++ 11统一初始化语法:`new int [10] {}`. (2认同)
  • @Fernando:你现在可以了,谢谢你指出这一点.但是,你很难找到一个在2010年5月接受它的编译器.`:)` (2认同)

Mic*_*yan 23

你为什么不用std :: vector?它会自动为你做到这一点.

std::vector<int> x(100); // 100 ints with value 0
std::vector<int> y(100,5); // 100 ints with value 5

同样重要的是要注意使用矢量更好,因为数据将被可靠地破坏.如果您有一个new[]语句,然后抛出异常,则分配的数据将被泄露.如果使用std :: vector,则将调用vector的析构函数,从而使数据被正确释放.

  • 我完全同意矢量通常更好,但我仍然想要新的[].+1无论如何. (2认同)