2014-01-27 55 views
1

所以我写了自己的内存管理类。C++显式析构函数通过基址指针调用

本质上,它通过malloc分配大内存块,然后根据要求它交出的内存请求者在程序(as you would expect。)

我也实现templated分配和释放功能,其中明确根据templatized类调​​用构造函数和destructor

正如您可能已经意识到的那样,当我尝试通过基指针进行删除时,会出现这样的问题吗?

templated函数拾取基类的类型,从而调用基类的虚拟destructor,而不是正确的派生类型destructor

有没有碰巧有一个放置删除或任何会像普通的“删除”命令,但不尝试deallocate内存?

+1

这似乎你有没有新的重载在基类 –

+1

/删除显示一些代码。 –

+0

也许看看这个SO帖子http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors –

回答

2

你只想调用析构函数,是这样的:

myObjPtr->〜MyClass的()

+0

是的,我明确地调用析构函数,但它是基础,因为这是什么被模板化 例如: A级 { public: virtual〜A(); }; B类:公共A { 公共: B(){} }; void main(void) void * pMem = malloc(sizeof(B)); A * a = new(pMem)B(); //假设我们现在还没有明确知道'a'中的内容。 a->〜A(); } 这显然是一个非常简单的例子,但你明白了。 – XxHoboRampagexX

+0

当我提交它时,所有文本格式都非常格式化。 – XxHoboRampagexX

+1

@ user3239404简单地说:'A * p = new B();因为'〜A()'是'virtual',所以''会导致'p->〜B()'被调用。 –

相关问题