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

时间:2010-03-18 07:47:36

标签: c++ arrays initialization

每隔一段时间我就需要为内置类型调用new[](通常为char)。结果是一个包含未初始化值的数组,我必须使用memset()std::fill()来初始化元素。

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

3 个答案:

答案 0 :(得分:32)

int* p = new int[10]()应该这样做。

但是,正如Michael points out一样,使用std::vector会更好。

答案 1 :(得分: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的析构函数,导致数据被正确释放。

答案 2 :(得分:2)

现在可以通过另一种变体来增强这个相对古老的主题。 我正在使用bool,因为vector<bool>

有一个非常奇怪的专业化
#include <memory>
...
unique_ptr<bool[]> p{ new bool[count] {false} };

现在可以使用operator[]

访问此内容
p[0] = true;

就像std::vector<T>一样,这是异常安全的。

(我想这不可能回到2010年:))