Se a memória que você está alocando for uma classe com um construtor que faz algo útil, o operador new chamará esse construtor e deixará seu objeto inicializado.
Mas se você estiver alocando um POD ou algo que não tenha um construtor que inicialize o estado do objeto, não poderá alocar memória e inicializá-la com o operador new em uma operação. No entanto, você tem várias opções:
1) Use uma variável de pilha. Você pode alocar e inicializar por padrão em uma etapa, assim:
int vals[100] = {0}; // first element is a matter of style
2) use memset()
. Observe que, se o objeto que você está alocando não for um POD , definir incorretamente é uma má idéia. Um exemplo específico é que, se você configurar uma classe que possui funções virtuais, você explodirá a tabela e deixará seu objeto em um estado inutilizável.
3) Muitos sistemas operacionais têm chamadas que fazem o que você deseja - aloque em uma pilha e inicialize os dados em algo. Um exemplo do Windows seriaVirtualAlloc()
4) Geralmente é a melhor opção. Evite ter que gerenciar a memória você mesmo. Você pode usar contêineres STL para fazer praticamente tudo o que faria com a memória bruta, incluindo alocar e inicializar tudo de uma só vez:
std::vector<int> myInts(100, 0); // creates a vector of 100 ints, all set to zero