繁体   English   中英

当派生类退出作用域时,基成员是否被销毁?

[英]When a derived class exits scope, does the base members get destroyed?

我一直在想一个事情,却找不到任何相关答案(也许我只是在寻找错误的事情?):

如果派生类退出作用域(然后调用析构函数),基类成员也将被销毁(即使析构函数已删除?)。

我得到的想法是,析构函数用于删除任何动态内存或关闭任何挂钩(文件等)。 因此,如果我有一个托管成员(例如字符串),它是否还会被销毁?

对不起,如果问题很愚蠢或之前已经回答过! 最好的问候,埃里克

是的,当派生类的实例被销毁时,将调用基类构造函数。 您需要注意的一种情况是,是否通过指向基址的指针delete派生对象:

class B
{
public:
   ~B();
}

class D : public B
{
public:
   ~D();
};

void f()
{
   B* p = new D();
   delete p; // will (probably) not call ~D()
}

为了进行类似上述工作,必须将〜B()声明为virtual

class B
{
public:
   virtual ~B();
};

每当对象超出范围时,就会调用其d-tor-由默认的编译器提供的或由用户提供的。

如果对象包括一个或多个基础对象,则将按类继承定义顺序的相反顺序调用其所有dtor。

然后,如果您需要在其中一个基类中取消分配动态内存,只需确保提供一个d-tor即可取消该类中的内存分配

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM