Zeb*_*ish 4 c++ struct destructor class
我知道,当为您提供隐式构造函数时,您的类成员将从左到右,从上到下进行初始化.换句话说,按照它们被声明的顺序.然后当类对象超出范围时,所有成员都以相反的顺序被破坏.但是,如果我必须自己摧毁成员,我必须按照它们列出的确切顺序进行吗?例如:
struct Dog {};
struct Animal
{
Dog* dog1 = new Dog;
Dog* dog2 = new Dog;
~Animal()
{
delete dog2; // First delete dog2
delete dog1; // Then delete dog1
// Or do I?
}
};
Run Code Online (Sandbox Code Playgroud)
我认为提供的析构函数是空的.因此,当我听到该类在超出范围时将调用其成员的析构函数时,它不会在它自己的析构函数中执行此操作,而是在它之后,使用编译器单独生成的代码?例如:
struct Animal
{
Dog dog1;
// ~Animal(){}implicitly defined destructor here. dog1 isn't destroyed here
// But is destroyed here, or after, or something along those lines with separate code that the compiler generates?
};
Run Code Online (Sandbox Code Playgroud)
谢谢.
但是,如果我必须自己摧毁成员,我必须按照它们列出的确切顺序进行吗?
不,按照你喜欢的顺序做.
但我更喜欢匹配"自动"订单,以避免感到惊讶.
我认为提供的析构函数是空的.因此,当我听到该类在超出范围时将调用其成员的析构函数时,它不会在它自己的析构函数中执行此操作,而是在它之后,使用编译器单独生成的代码?
基本上,是的.
执行析构函数体是破坏的一部分.另一部分是对所有成员和基地的破坏.