我正在阅读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