2011-09-12 5 views
0

Je décide donc d'avoir du plaisir pointeur ce soir :)Comment libérer des types pointeur à pointeur pointant vers des types pointeurs dans le segment de mémoire qui pointent vers d'autres objets dans le segment de mémoire?

CursorHBList::CursorHBList(UINT iNumHB) 
    :m_ppCursorHB(nullptr) 
    ,m_iNumHB(iNumHB) 
{ 
    if (iNumHB != 0) { 
     m_ppCursorHB = new CursorHitBox* [iNumHB]; 
    } 
} 

afin que vous puissiez voir, je l'ai maintenant alloué dynamiquement pointer-types.

Ces pointeurs pointeront chacun vers un autre objet (unique) dans le tas. (plus tard, pas dans l'exemple de code)

Je me suis donc demandé si je devais supprimer d'abord tous les types de pointeurs vers des objets pointés par le type pointeur vers pointer, puis supprimer [] le pointeur vers le type de pointeur?

Ou y a-t-il un meilleur moyen?

EDIT: Sans utiliser des pointeurs intelligents ...

+0

Oui, il existe un meilleur moyen. Comme en utilisant un vecteur de pointeurs intelligents. – AJG85

+0

Sans utiliser de pointeurs intelligents ... – xcrypt

+0

Que voulez-vous dire quand vous dites statiquement alloué sur le tas? –

Répondre

2

Comme suggéré, une meilleure façon serait en utilisant un conteneur de pointeurs intelligents. Cependant, puisque vous ne pouvez pas utiliser de pointeurs intelligents (je ne sais pas pourquoi parce que tout un pointeur intelligent est une classe très simple, vous pouvez écrire les vôtres), vous devrez parcourir le tableau et delete chaque pointeur, puis delete[] le tableau, dans cet ordre. C'est exactement ce que vous devez faire lorsque vous gérez votre propre mémoire.

+1

Très bien, merci. Je n'aime pas vraiment travailler avec des pointeurs intelligents, parce que j'aime voir ce qui se passe. Je pourrais commencer à les utiliser plus tard, quand je serai expérimenté. – xcrypt

+0

@xcrypt Je suis de la même manière, j'écris presque toujours ma propre version d'une classe avant d'utiliser la version de la bibliothèque standard C++. C'est du C++, c'est bien de savoir exactement ce qui se passe. –

+0

L'OP a clarifié que les objets pointés sont _not_ alloués dynamiquement, auquel cas vous ne devriez pas appeler 'delete' sur chaque pointeur, n'est-ce pas? juste 'supprimer []' le tableau. –

Questions connexes