从基类指针中删除对象

Jér*_*eil 3 c++

想象一下,我有两个A类和B类定义如下:

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

class B : public A {
public: 
    virtual void pureVirtual();
}
Run Code Online (Sandbox Code Playgroud)

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

B *myB = new B;
A *myA = myB;
Run Code Online (Sandbox Code Playgroud)

是否可以通过调用myA上的 delete 来删除myB对象:?我是否必须做一些特别的事情才能做到这一点?OOP的想法和编程风格是否合适,还是一个非常糟糕的主意?delete myA;

谢谢!

Bjö*_*lex 7

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

class A {
public:
    virtual void pureVirtual() = 0;
    virtual ~A() {}
}
Run Code Online (Sandbox Code Playgroud)

从面向OO的角度来看,这没有任何问题.

  • @ MichaelKrelin-hacker:代码`A*a = new B; 删除a;`如果`A`没有虚拟析构函数,则唤起UB,不管其他什么`A`和'B`做什么. (2认同)