Como eu posso fazer o `new ` default-inicializar o array de tipos primitivos?

De vez em quando eu preciso chamar new[] para tipos char (geralmente char ). O resultado é uma matriz com valores não inicializados e eu tenho que usar memset() ou std::fill() para inicializar os elementos.

Como eu faço o new[] default-initialize os elementos?

int* p = new int[10]() deve fazer.

No entanto, como Michael aponta , usar std::vector seria melhor.

Por que você não usa apenas std :: vector? Ele fará isso por você, automaticamente.

 std :: vector  x (100);  // 100 ints com valor 0
 std :: vector  y (100,5);  // 100 ints com valor 5

Também é importante observar que usar vetores é melhor, já que os dados serão destruídos de maneira confiável. Se você tiver uma new[] instrução new[] e, em seguida, uma exceção for lançada subseqüentemente, os dados alocados serão vazados. Se você usar um std :: vector, o destruidor do vetor será invocado, fazendo com que os dados sejam desalocados corretamente.

Esse tópico relativamente antigo agora pode ser aprimorado por outra variante. Eu estava usando bool, porque há uma especialização bastante estranha para o vector

 #include  ... unique_ptr p{ new bool[count] {false} }; 

isso agora pode ser acessado com o operator[]

 p[0] = true; 

assim como std::vector esta é uma exceção segura.

(Eu suponho que isso não foi possível em 2010 :))