Si la memoria que está asignando es una clase con un constructor que hace algo útil, el operador new llamará a ese constructor y dejará su objeto inicializado.
Pero si está asignando un POD o algo que no tiene un constructor que inicialice el estado del objeto, entonces no puede asignar memoria e inicializar esa memoria con el operador nuevo en una operación. Sin embargo, tiene varias opciones:
1) Use una variable de pila en su lugar. Puede asignar e inicializar por defecto en un paso, de esta manera:
int vals[100] = {0}; // first element is a matter of style
2) uso memset()
. Tenga en cuenta que si el objeto que está asignando no es un POD , es una mala idea memorizarlo. Un ejemplo específico es que si configura una clase que tiene funciones virtuales, eliminará la vtable y dejará su objeto en un estado inutilizable.
3) Muchos sistemas operativos tienen llamadas que hacen lo que usted desea: asignar en un montón e inicializar los datos a algo. Un ejemplo de Windows seríaVirtualAlloc()
4) Esta suele ser la mejor opción. Evite tener que manejar la memoria usted mismo. Puede usar contenedores STL para hacer casi cualquier cosa que haría con la memoria sin procesar, incluida la asignación e inicialización de una sola vez:
std::vector<int> myInts(100, 0); // creates a vector of 100 ints, all set to zero