我有以下课程:
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
是一个指向 a 的指针struct Link
,它有一个 void 指针作为成员。所以通过删除oldHead
,我隐含地删除了那个 void 指针,对吧?
我正在阅读 Bruce Eckel 的 Thinking in C++,它说删除 void 指针并不能正确清理,因为delete
需要知道指针的类型。
此代码隐式删除 void 指针data
,因此:有人可以解释为什么删除 void 指针的这种(隐式)方式与删除 with 不同delete <void pointer>
吗?