C++ explicit destructor call through base pointer
因此,我编写了自己的内存管理类。
本质上,它通过malloc分配大块内存,然后在请求时将其移交给程序中的请求者(as you would expect)。
我还实现了templated分配和自由函数,它们根据templatized类显式调用构造函数和destructor。
您可能已经意识到的问题是,当我尝试通过基本指针删除时该怎么办?
templated函数选择基类的类型,因此将调用基类的虚拟destructor,而不是正确派生的destructor。
没有碰巧删除展示位置或执行任何类似于常规"删除"命令但不尝试deallocate内存的操作?
-
看来您的基类中没有重载new / delete
-
显示一些代码。
-
也许看看这个SO stackoverflow.com/questions/461203/
您只想调用析构函数,例如:
myObjPtr->?MyClass()
-
是的,我显式地调用了析构函数,但是它的基础是析构函数,因为那是通过传入的指针来模板化的。例如:class A {public:virtual?A(); }; B类:public A {public:?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。
-
好极了! 似乎多数民众赞成在它应该如何运作,但我在析构函数调用时遇到运行时错误。 那时其他事情一定会出错。 谢谢!