衍生类包含指向基类对象的指针时的析构函数

时间:2016-01-04 21:29:46

标签: c++ polymorphism destructor

我编写了一个纯虚拟析构函数,并在抽象基类中实现它并在派生类中重写它。

但是,在其中一个类中,我有一个指向基类对象的指针 现在,应该以这种方式编写派生类的析构函数:

virtual ~DerivedClass()
{
delete this->pointerToAnotherDerivedClassObject;
}

或者会自动删除该对象吗?由于总是调用基类析构函数所以我无法决定它是否会处理它。

编辑:我说它的错误是指向基类的指针,因为它实际上是另一个派生类对象的指针。

2 个答案:

答案 0 :(得分:2)

  

但是,在其中一个类中,我有一个指向基类对象的指针。    现在,应该以这种方式编写派生类的析构函数

由于git mv指向内存中的另一个对象,然后是,您的pointerToAnotherDerivedClassObject析构函数需要显式DerivedClass该对象(或将原始指针包装在内部)智能指针 - deletestd::auto_ptrstd::unique_ptr - 并让它std::shared_ptr为您提供对象) delete是为了拥有那个其他对象。否则,如果您不拥有它,请不要DerivedClass

答案 1 :(得分:0)

@Elia类似的情况在Eckel"思考C ++ vol-2"在关于伪虚拟构造函数的设计模式第10章中。您的问题的答案是,您需要删除它,考虑到您动态分配它。也不要将成员Base *与Base对象混淆,Base对象是由于继承而导出的一部分,一个是数据成员(这是你要删除的),其他是由于继承。