[英]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.