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

C++ 派生类包含指向基类对象的指针时的析构函数,c++,polymorphism,destructor,C++,Polymorphism,Destructor,我编写了一个纯虚拟析构函数,并在抽象基类中实现它,并在派生类中重写它 但是,在其中一个类中,我有一个指向基类对象的指针。 现在,派生类的析构函数应该这样写: virtual ~DerivedClass() { delete this->pointerToAnotherDerivedClassObject; } 还是会自动删除该对象?由于基类析构函数总是被调用,所以我无法决定它是否处理它 编辑:我错误地指出它是指向基类的指针,因为它实际上是另一个派生类对象的指针 但是,在其中一个类中,我有

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

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

virtual ~DerivedClass()
{
delete this->pointerToAnotherDerivedClassObject;
}
还是会自动删除该对象?由于基类析构函数总是被调用,所以我无法决定它是否处理它

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

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


由于
pointerToAnotherDerivedClassObject
指向内存中的另一个对象,因此是的,
DerivedClass
析构函数需要显式
删除该对象(或者将原始指针包装在智能指针内-
std::auto_ptr
std::unique_ptr
、或
std::shared_ptr
,让它为您删除对象)只有<代码> DerivedClass <代码>是指拥有其他对象。否则,不要<代码>删除< /代码>如果你不拥有它。

@ Elia类似的情形在ECKEL《C++ V2+思想》中讨论。在设计模式第10章中,关于伪虚拟构造函数。您的问题的答案是,考虑到您动态分配它,您确实需要删除它。另外,不要将成员Base*与作为继承派生的一部分的基对象混淆,一个是数据成员(这是您要删除的)另一个原因是继承。

听起来像是一个严重的设计缺陷。派生类实际上拥有基类实例吗?我没有从头开始编写这段代码,它是在这种状态下半成品交给我的。它是指向您自己的指针,还是一个单独的基类对象?即,
pointerToBaseClassObject=(base*)这;
指针tobaseclassObject=other
。这正是虚拟析构函数为您完成的工作……无需“删除”这一点(如果对象没有分配新的,这将是不好的,这很可能)不,当然不。这将是不好的。这很好,但您不需要编写“this->”在变量名之前。默认情况下,只需写
delete pointer到另一个derivedClassObject;
就足够了。事实就是这样。是的,它意味着拥有另一个对象。