Cla*_*diu 2 c++ destructor class member instance
如果我有类似的东西
class Foo { ... }
class UsesFoo {
private:
Foo foo;
public:
UsesFoo() : foo(1, 2, 3) { }
}
Run Code Online (Sandbox Code Playgroud)
然后据我所知,当我构造一个UsesFoo(be it UsesFoo *myMan = new UsesFoo();或UsesFoo myMan;)时,它Foo就像通过调用一样创建一个对象Foo(1, 2, 3).当UsesFoo被摧毁时(无论是通过delete myMan;还是超出范围),Foo内部也将被破坏.
如果我提供以下析构函数,Foo仍然会被破坏吗?
~UsesFoo() { }
Run Code Online (Sandbox Code Playgroud)
如果没有,那么我该怎么办才能破坏Foo?换句话说,作为类实例的非指针成员变量如何被破坏的语义是什么?
如果我提供以下析构函数,
Foo仍然会被破坏吗?
是的.标准,
在执行析构函数的主体并销毁在主体内分配的任何自动对象之后,类
X的析构函数调用析构函数X的直接非变量非静态数据成员,X直接基类的析构函数,如果X是最派生类的类型(12.6.2),它的析构函数调用析构函数X的虚拟基类.
(C++ 11,§12.4/ 8)