2011-03-20 4 views
8

Pensez code suivant:nouvelle ou nouvelle [] opérateur

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

Selon la norme version de new sera appelée dans 1-er et cas 2-ème (new ou new[]) et comment supprimer arr1 et arr2 (avec delete ou delete[])?

+2

Pour être honnête, c'est probablement une mauvaise pratique. – deek0146

+0

C'est certainement une mauvaise pratique, et cela causerait probablement un mal de tête à quelqu'un d'autre. –

Répondre

9

Le premier cas alloue un tableau unidimensionnel, le second cas un tableau bidimensionnel. Les deux doivent être libérés via delete[], sinon vous aurez un comportement indéfini.

1

Il utilisera new[] dans les deux cas. Vous pouvez vérifier vous-même en définissant operator new[] pour SomeType et imprimer quelque chose à l'écran. Vous verrez qu'il sera imprimé dans les deux cas.

Questions connexes