我有一个基本而简单的问题。
我有这种情况:
#include <iostream>
using namespace std;
class Inner1
{
public:
~Inner1() {cout << "Inner1 Des\n";};
};
class Inner2
{
public:
~Inner2() {cout << "Inner2 Des\n";};
};
class Base
{
public:
~Base() {cout << "Base Des\n";};
Inner1 inner1;
Inner2 inner2;
};
int main() {
Base base;
return 0;
}
我的控制台现在告诉我:
称为
Inner2的基本析构函数称为
Inner1的析构函数
这是正常现象吗?因为某些功能的功能
已在我的基类析构函数中销毁,并且内部类依赖于它们。
不建议解决方法:
只需在对象的第一个位置添加“ Destroyer”类即可:
[...]
class Base
{
public:
~Base() {cout << "Base Des\n";};
class Destroyer
{
~Destroyer()
{
//Put the stuff here because this destr will be called last
cout << "Destroyer Des\n";
}
} _destroyer;
Inner1 inner1;
[...]
感谢您的帮助
这是正常现象吗?
是的。子对象析构函数由容器类的析构函数调用。特别是,在执行完容器类析构函数的主体之后,将销毁子对象。
因为某些功能的功能已在我的基类析构函数中销毁,并且内部类依赖于它们。
如果内部类[sic]析构函数依赖于Base
包含它们的实例,那只会是一个问题。在这种情况下,要么Base
不应该将它们包含为成员,要么它们的析构函数不应依赖Base
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句