저는 C++, 13 장 : 동적 객체 생성에 대해 생각하고 있습니다. 이 장에서 void * 삭제에 대한 Eckel의 말은 아마도 버그 일 수 있습니다. 다음 단락은 나를 혼란스럽게합니다.void * 포인터를 C++에서 삭제
다른 메모리 누수 문제는 컨테이너에있는 각 객체 포인터에 대해 실제로 삭제가 이라는 것을 확인하는 것과 관련이 있습니다. 컨테이너는 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();
};
나는 당신이 의미를 잘못 이해했다고 생각합니다. 중요한 것은'void *'를 평범하지 않은 객체 **에 삭제할 수 없다는 것과 ** 스택을 가리킬 수있는 포인터를 삭제할 수 없다는 것을 별도로 명시하고 있습니다. –
가능한 복제본 [void 포인터를 삭제해도 안전합니까?] (http://stackoverflow.com/questions/941832/is-it-safe-to-delete-a-void-pointer) – bobobobo