【发布时间】:2012-09-27 12:46:10
【问题描述】:
假设我有一个 new 分配给一个名为 MyClass 的类,分配很简单:
MyClass *myClassPtr = new MyClass();
我存储对 void* 列表的引用,我只是说
myListOfPointers.add(static_cast<void*>(myClassPtr)); // this has to be void*
后来我释放内存而不是这样做:
delete myClassPtr
我用:
delete MyListOfPointer.get(0)
(假设 myClassPtr 引用位于零索引处。)另外,请注意它必须是 void*,因为此列表可以存储不同类型的指针,所以我不知道我要删除的指针类型:
所以我不能这样做:
delete static_cast<MyClass*>(MyListOfPointer.get(0))
这种方式会释放正确的内存大小吗? (sizeof(MyClass))?
注意:
我不是在寻找任何指向智能指针的答案。
【问题讨论】:
-
您还会遇到未调用析构函数的潜在问题...希望您意识到这一点...
-
是的,我当然知道,但在这种情况下,我主要关心的是内存释放大小
-
这看起来类似于stackoverflow.com/questions/941832/…(答案是删除空指针不安全)
标签: c++ pointers memory-management void