【问题标题】:C++ explicit destructor call through base pointerC++ 通过基指针显式调用析构函数
【发布时间】:2014-02-17 22:32:32
【问题描述】:

所以我编写了自己的内存管理类。

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

我还实现了templated 分配和释放函数,它们基于templatized 类显式调用构造函数和destructor

您可能已经意识到,当我尝试通过基指针删除时,问题是什么?

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

碰巧没有放置删除或任何功能类似于常规“删除”命令但不尝试deallocate内存的东西?

【问题讨论】:

标签: c++ memory-management destructor


【解决方案1】:

您只想调用析构函数,例如:

myObjPtr->~MyClass()

【讨论】:

  • 是的,我明确地调用了析构函数,但它是基础的,因为这是通过传入的指针模板化的内容。例如:class A { public: virtual ~A(); }; B类:公共A {公共:〜B(){}}; void main(void) { void* pMem = malloc(sizeof(B)); A *a = new(pMem) B(); //假设此时我们不明确知道“a”中的内容。 a->~A();这显然是一个过于简单化的例子,但你明白了。
  • @user3239404 简单地说:A* p = new B(); p->~A(); 将导致 p->~B() 被调用,因为 ~A()virtual
  • 好的,真棒!看起来它应该是这样运行的,但是我在析构函数调用时遇到了运行时错误。那时肯定有其他事情出错了。谢谢!
猜你喜欢
  • 2013-12-31
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
相关资源
最近更新 更多