每隔一段时间我就需要为内置类型调用new[]
(通常为char
)。结果是一个包含未初始化值的数组,我必须使用memset()
或std::fill()
来初始化元素。
如何使new[]
默认初始化元素?
答案 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年:))