Ответ 1
int* p = new int[10]()
должен делать.
Однако, как Майкл указывает, использование std::vector
было бы лучше.
Время от времени мне нужно вызвать new[]
для встроенных типов (обычно char
). Результатом является массив с неинициализированными значениями, и я должен использовать memset()
или std::fill()
для инициализации элементов.
Как мне сделать new[]
по умолчанию инициализировать элементы?
int* p = new int[10]()
должен делать.
Однако, как Майкл указывает, использование std::vector
было бы лучше.
Почему бы вам просто не использовать 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, тогда будет выведен вектор-деструктор, который приведет к правильной деадаптации данных.
Эта относительно старая тема теперь может быть усилена другим вариантом.
Я использовал bool, потому что существует довольно странная специализация для vector<bool>
#include <memory>
...
unique_ptr<bool[]> p{ new bool[count] {false} };
теперь можно получить доступ с помощью operator[]
p[0] = true;
как и std::vector<T>
, это безопасное исключение.
(я полагаю, это было невозможно в 2010 году:))