我正在閱讀C++中的思考,第13章:動態對象創建。 在本章中,Eckel談論刪除void *可能是一個錯誤。 以下段落讓我困惑。在C++中刪除void *指針
另一個內存泄漏問題與確保刪除爲容器中保存的每個對象指針實際調用的 有關。 容器不能「擁有」指針,因爲它將其作爲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 *'到一個非平凡的對象**,並單獨**表明你不能刪除可能指向堆棧的指針。 – 2013-04-08 16:34:42
可能重複[是否安全刪除無效指針?](http://stackoverflow.com/questions/941832/is-it-safe-to-delete-a-void-pointer) – bobobobo 2013-05-07 00:55:28