1

所以我想重载删除抽象虚拟类。这将在另一个库中的派生类中调用 deleteMe()。这是为了防止这里提到的错误/崩溃C++ mix new/delete between libs?

当我在我的基类中调用 delete me from delete 时,我收到错误“纯虚拟函数调用”。然后我发现它已经调用了我的 dtor。我如何重载删除或以不调用 dtor 的方式编写此代码,以便我可以编写删除 obj;并让它调用 obj->deleteMe() 然后调用它自己的删除函数和 dtor?

4

1 回答 1

6

听起来你使用 operator delete 就像一个应该做任意事情的普通函数。然而,操作符 delete 只应该释放作为第一个参数提供给它的内存,它是指向该内存区域的指针。

该指针将指向您的对象所在的内存位置。但是,此时,您的对象的析构函数已经运行,并且您的对象不再存在。你根本不能在它上面调用任何成员函数——更不用说虚函数了!

我感觉你把操作员删除的目的弄错了。如果调用delete pointer,编译器会调用对象的析构函数,然后调用释放函数释放分配的内存,这就是调用operator delete

那么,为什么不使用我们之前向您展示的解决方案boost::shared_ptr呢?

于 2009-01-14T15:39:20.830 回答