2011-08-25 16 views
9

Tuve problemas para inicializar matrices de punteros. Lo que descubrí compilar con gcc C++ (4.6.0) es:Ayuda de inicialización del conjunto de punteros C++

MyClass** a = new MyClass*[100]; 

no siempre inicializar la matriz de punteros. (La mayoría de las veces se me dio una matriz de punteros nulos que me confunden)

MyClass** a = new MyClass*[100](); 

HACE inicializar todos los punteros de la matriz a 0 (puntero nulo).

El código que estoy escribiendo está destinado a ser portátil en plataformas Windows/Linux/Mac/BSD. ¿Es esta una característica especial del compilador gcc C++? o es un estándar C++? ¿Dónde en el estándar dice eso?

+0

Es de suponer que usted se refiere a 'MiClase ** a = new MiClase * [100]()'. Sí, el inicializador 'nuevo' es una característica estándar. Solo estoy cazando una pregunta duplicada. –

+0

No es exactamente un duplicado porque pregunta por qué no (que es incorrecto) en lugar de por qué: http://stackoverflow.com/questions/6717246/no-array-allocated-using-new-can-have-an-initializer ... .pero lo suficientemente cerca. Votando para cerrar. –

+0

La primera versión devuelve la memoria no inicializada, que por supuesto * puede * ser NULL (cero) si no se utiliza anteriormente. La mayoría de los sistemas operativos borran la memoria asignada a un proceso, por razones de seguridad. –

Respuesta

5

Esta inicialización de valor es estándar C++.

El standardeese relevante está en C++ 98 y C++ 03 §5.3.4/15. En C++ 98 fue inicialización por defecto, en C++ 03 y más tarde es inicialización de valor. Para sus indicadores, ambos se reducen a cero inicialización.

C++ 03 §5.3.4/15:

– Si el nuevo-inicializador es de la forma (), el artículo es de valor inicializado (8,5);

En C++ 0x ese párrafo se refiere al lugar “ las reglas de inicialización de 8,5 para la inicialización directo ”, donde en N3290 (FDIS) se encuentra sobre la misma formulación en §8.5/16.

Saludos & HTH.,

+0

¡Gran respuesta! Exactamente lo que esperaba. Ahora puedo inicializar/valorar/cero inicializar con confianza. –