2011-03-20 8 views
8

Considere lo siguiente:nuevo o nuevo código de operador []

typedef SomeType type_t[2]; 
SomeType * arr1 = new type_t; //new or new[] ??? 
type_t * arr2 = new type_t[3]; //new or new[] ??? 

Según estándar de la versión de new será convocado en los casos 2-nd 1-st y (new o new[]) y cómo eliminar arr1 y arr2 (con delete o delete[])?

+2

Para ser honesto, esta es probablemente una mala práctica – deek0146

+0

Esto es definitivamente una mala práctica, y probablemente cause un dolor de cabeza a alguien en el futuro. –

Respuesta

9

El primer caso asigna una matriz unidimensional, en el segundo caso una matriz bidimensional. Ambos deben ser liberados a través del delete[], de lo contrario obtendrá un comportamiento indefinido.

1

Utilizará new[] en ambos casos. Puede verificarlo usted mismo definiendo operator new[] para SomeType e imprimiendo algo en la pantalla. Verá que se imprimirá en ambos casos.

Cuestiones relacionadas