想象一下,我有两个类 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的想法和编程风格,或者是一个非常糟糕的想法?
谢谢!
答案 0 :(得分:7)
有可能,但A
需要一个虚拟析构函数才能正常工作:
class A {
public:
virtual void pureVirtual() = 0;
virtual ~A() {}
}
从OO角度来看,这没有任何问题。
答案 1 :(得分:1)
将Base的析构函数定义为virtual将确保派生的析构函数也将在它之前被调用。
当我知道我计划将Base *赋予Derived对象时,我总是将析构函数定义为虚拟。
答案 2 :(得分:0)
您唯一需要做的就是在基类中使析构函数虚拟