所以我想重载一个抽象虚拟类的删除。这将在另一个lib中的派生类中调用deleteMe()。这是为了防止错误/崩溃提到C++ mix new/delete between libs?
当我在我的基类中调用delete from delete时,我收到错误“pure virtual func call”。然后我发现它已经叫我的dtor了。我如何重载删除或编写此代码的方式,它不会调用dtor所以我可以写删除obj;并让它调用obj-> deleteMe()然后调用它自己的删除函数和dtor?
答案 0 :(得分:6)
听起来你像使用普通函数那样使用operator delete来做任意事情。但是,操作符删除只能释放给它的内存作为第一个参数,它是指向该内存区域的指针。
该指针将指向对象所在的内存位置。但是,此时,对象的析构函数已经运行,并且您的对象不再存在。你根本不能调用任何成员函数 - 更不用说虚函数了!
我觉得你弄错了运营商删除的目的。如果调用delete pointer
,编译器将调用该对象的析构函数,然后调用释放函数以释放分配的内存,称为operator delete
。
那么,为什么不使用我们之前展示过的解决方案boost::shared_ptr
?