У меня есть следующий класс:Удаление вложенной структуры с указателями void как членами?
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();
};
Метод pop
является:
void* Stack::pop() {
if(head == 0) return 0;
void* result = head->data;
Link* oldHead = head;
head = head->next;
delete oldHead;
return result;
}
oldHead
является указателем на struct Link
, который имеет пустое указатель в качестве члена. Итак, удалив oldHead
Я неявно удаляю этот указатель void, не так ли?
Я читаю «Мышление на C++» Брюса Эккеля, и он говорит, что удаление указателей void не очищает вещи должным образом, потому что delete
должен знать тип указателя.
Этот код неявно удаляет указатель void data
, так: Может ли кто-нибудь объяснить, почему этот (неявный) способ удаления указателя void отличается от удаления с помощью delete <void pointer>
?
Почему, по-вашему, это другое? –
Что касается мышления на C++, не используйте void *. В этом примере шаблоны будут работать отлично. –
Дэвид, я предположил, что это было другое, поскольку автор сначала предупреждает об использовании delete на указателях void, а затем использует приведенный выше код. –