I ont la classe suivante:Suppression d'une structure imbriquée avec des pointeurs void en tant que membres?
class Stack {
struct Link {
void* data;
Link* next;
void initialize(void* dat, Link* nxt);
}* head;
public:
void initialize();
void push(void* dat);
void* peek();
void* pop();
void cleanup();
};
La méthode pop
est:
void* Stack::pop() {
if(head == 0) return 0;
void* result = head->data;
Link* oldHead = head;
head = head->next;
delete oldHead;
return result;
}
oldHead
est un pointeur vers une struct Link
, qui a un pointeur nul en tant que membre. Donc, en supprimant oldHead
, je supprime implicitement ce pointeur vide, non? Je suis en train de lire Thinking in C++ de Bruce Eckel, et il dit que la suppression des pointeurs vides ne nettoie pas les choses correctement car delete
a besoin de connaître le type du pointeur.
Ce code supprime implicitement le pointeur vide data
, donc: Quelqu'un peut-il expliquer pourquoi cette façon (implicite) de supprimer un pointeur vide est différente de la suppression avec delete <void pointer>
? En supprimant Link
, cet espace mémoire vide * n'est pas supprimé.
Pourquoi pensez-vous que c'est différent? –
En ce qui concerne la réflexion en C++, n'utilisez pas void *. Les modèles fonctionneraient parfaitement pour cet exemple. –
David, j'ai supposé que c'était différent puisque l'auteur d'abord met en garde contre l'utilisation de supprimer sur les pointeurs de vide, puis utilise le code ci-dessus. –