私は次のクラスを持っています:
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
、メンバーとしてvoidポインタを持っています。それで、削除することによって、oldHead
私はそのvoidポインターを暗黙的に削除しているのですよね?
BruceEckelによるThinkinginC ++を読んでいますdelete
が、ポインタの種類を知る必要があるため、voidポインタを削除しても適切にクリーンアップされないと言われています。
このコードは暗黙的にvoidポインターdata
を削除しているので、誰かがvoidポインターを削除するこの(暗黙の)方法がwithで削除するのと異なる理由を説明できますかdelete <void pointer>
?