从基类指针中删除对象

时间:2011-12-01 15:11:34

标签: c++

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

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 上的删除来删除 myB 对象:delete myA;?我是否必须做一些特别的事情才能做到这一点? 是否可以使用OOP的想法和编程风格,或者是一个非常糟糕的想法?

谢谢!

3 个答案:

答案 0 :(得分:7)

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

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

从OO角度来看,这没有任何问题。

答案 1 :(得分:1)

将Base的析构函数定义为virtual将确保派生的析构函数也将在它之前被调用。
当我知道我计划将Base *赋予Derived对象时,我总是将析构函数定义为虚拟。

答案 2 :(得分:0)

您唯一需要做的就是在基类中使析构函数虚拟