从基类指针中删除对象

Delete an object from a base class pointer

本文关键字:删除 对象 指针 基类      更新时间:2023-10-16

假设我有两个类AB,定义如下:

class A {
public:
    virtual void pureVirtual() = 0;
}
class B : public A {
public: 
    virtual void pureVirtual();
}

我当然有其他的方法,但这只是为了这个例子。现在,在我的cpp代码中,我有这样的var:

B *myB = new B;
A *myA = myB;

是否有可能通过在myA上调用delete来删除myB对象:delete myA; ?我需要做一些特别的事情才能做到这一点吗?对于面向对象的思想和编程风格来说,它是可以接受的,还是一个非常糟糕的想法?

谢谢!

这是可能的,但A需要一个虚拟析构函数才能正常工作:

class A {
public:
    virtual void pureVirtual() = 0;
    virtual ~A() {}
}

从oo的角度来看,这没有什么问题。

将基类的析构函数定义为virtual将确保派生类的析构函数也将被调用,并且在它之前被调用。
当我知道我计划使用Base*到派生对象时,我总是将析构函数定义为virtual。

您唯一需要做的就是在基类

中使析构函数为虚函数。