不时需要拨打电话new[]
获取内置类型(通常为char
)。结果是一个未初始化值的数组,我必须使用memset()
或std::fill()
来初始化元素。如何使`new []`初始化原始类型的数组?
如何使new[]
默认初始化元素?
不时需要拨打电话new[]
获取内置类型(通常为char
)。结果是一个未初始化值的数组,我必须使用memset()
或std::fill()
来初始化元素。如何使`new []`初始化原始类型的数组?
如何使new[]
默认初始化元素?
int* p = new int[10]()
应该做的。
但是,由于Michael points out,使用std::vector
会更好。
您也可以使用C++ 11统一初始化语法:'new int [10] {}'。 – 2015-05-22 19:27:09
@Fernando:你现在可以,谢谢你指出这一点。不过,你很难在2010年5月找到一个接受该编译器的编译器。 ':)' – sbi 2015-05-23 06:49:44
为什么你不使用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的析构函数,导致数据正确释放。
我完全同意vector往往更好,但我仍然想要new []。无论如何。 – sharptooth 2010-03-22 14:57:34
这个相对较旧的主题现在可以通过另一个变体进行增强。 我用布尔,因为没有为vector<bool>
#include <memory>
...
unique_ptr<bool[]> p{ new bool[count] {false} };
一个很奇怪的专业化但是现在可以用operator[]
p[0] = true;
就像std::vector<T>
这是异常安全的访问。
(我想这不可能在2010年:))
我不确定这是否有效,但在VC9上正常工作。 'int * p = new int [10]();' – Naveen 2010-03-18 07:54:43