Quelle est la forme de tableau de «supprimer»?
Lorsque j'ai compilé un code en utilisant le nom du tableau comme un pointeur, et j'ai supprimé le nom du tableau à l'aide de delete
j'ai reçu un avertissement à propos de la suppression d'un tableau sans l'aide de la matrice de la forme (je ne me souviens plus de la formulation exacte).
Le code de base était:
int data[5];
delete data;
Alors, quelle est la matrice de la forme de la supprimer?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
La forme matricielle de supprimer est:
Edit: Mais comme d'autres l'ont souligné, vous ne devriez pas appeler
delete
pour les données définies comme ceci:Vous devez seulement appeler quand vous allouer de la mémoire à l'aide de
new
comme ceci:Vous voulez:
ou
Les genres de la règle est: ne s'appliquent
delete
à la mémoire qui est venu denew
. Si le tableau de la forme denew
a été utilisé, alors vous doit utiliser la matrice de la forme dedelete
de match. Si le placementnew
a été utilisé, ensuite, soit vous n'appelez jamaisdelete
à tous, ou utiliser un correspondant de placementdelete
.Puisque la variable
int data[5]
est allouée statiquement tableau, il ne peut être transmis à toute forme de ladelete
de l'opérateur.Que les autres ont dit, vous devez utiliser la forme vectorielle de supprimer:
Être très conscients de cela, parce que certains compilateurs pas vous avertir.
Encore mieux, il y a très rarement besoin de l'aide de vecteur de new/delete. Demandez-vous si votre code peut être modifié pour utiliser std::vector:
Et si vous êtes aux prises avec la mémoire, dans une portée locale, envisager d'utiliser STLSoft's auto_bufferqui allouera à partir d'une mémoire tampon interne (qui s'est tenue sur la pile, dans le cadre de l'instance) si possible, ne va le tas si il ne peut pas:
Lire plus sur auto_buffer.
Le code comme indiqué a le tableau sur la pile, ou dans initialisé partie du segment de données, c'est à dire que vous n'avez pas désallouer (qui, comme mentionné par d'autres, ce serait "un comportement non défini".) Ont été sur la "boutique", vous auriez du le faire avec
delete [] data
.Comme RichieHindle indiqué ci-dessus lorsque vous souhaitez libérer de l'espace alloué dynamiquement pour un tableau pointé par
data
vous devez mettre les deux supports[]
entre le mot réservédelete
et le pointeur vers le début de l'espace alloué. Depuisdata
peuvent pointer vers un seulint
en mémoire, ainsi que pour le premier élément dans le tableau c'est la seule façon de permettre au compilateur de savoir que vous souhaitez supprimer toute la partie de la mémoire. Si vous ne le faites pas de manière correcte, le comportement est "indéterminé" (Stroustrup, Le Langage de Programmation C++).