C++ 保证在处理类时处理类成员
我有以下情况: 我的类A包含类B中的堆栈成员对象:C++ 保证在处理类时处理类成员,c++,destructor,composition,C++,Destructor,Composition,我有以下情况: 我的类A包含类B中的堆栈成员对象: Class A{ B b; } 我使用B对象来重新定义A的初始化和销毁行为 Class B{ B(){cout<<"taken care of some specific context initialization"<<endl;} ~B(){cout<<"cleaning the context initialization done before"<<endl;}
Class A{
B b;
}
我使用B对象来重新定义A的初始化和销毁行为
Class B{
B(){cout<<"taken care of some specific context initialization"<<endl;}
~B(){cout<<"cleaning the context initialization done before"<<endl;}
}
B类{
B(){coutC++遵循一种“好像”行为,这意味着理论上只要程序的行为不受影响,在之前B
就有可能被销毁。如果它不受影响,那么在什么时候被销毁其实并不重要
但实际上,b
将在其所有者A
实例的析构函数被销毁后立即销毁
其保证如下:
12.4析构函数[类dtor]
8) 执行析构函数体并销毁任何
在主体内分配的自动对象,类X的析构函数
调用X的直接非变量非静态数据的析构函数
成员,X的直接基类的析构函数,如果X是
最派生类(12.6.2)的类型,其析构函数调用
X的虚拟基类的析构函数。[…](强调我的)
请注意,其可观察的行为就好像发生了这种情况一样的实现仍然符合标准。在您的特定情况下,由于析构函数具有IO操作,因此可以保证这种行为确实发生。b
不会在“A”之后被销毁。它在A
的销毁过程中被销毁。编译器无法决定在销毁之前或之后销毁它。编译器无法这样做,因为析构函数有副作用。