我是否必须在析构函数中执行任何操作以释放非指针成员变量?

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?换句话说,作为类实例的非指针成员变量如何被破坏的语义是什么?

Bri*_*ian 5

如果我提供以下析构函数,Foo仍然会被破坏吗?

是的.标准,

在执行析构函数的主体并销毁在主体内分配的任何自动对象之后,类X的析构函数调用析构函数X的直接非变量非静态数据成员,X直接基类的析构函数,如果X是最派生类的类型(12.6.2),它的析构函数调用析构函数X的虚拟基类.

(C++ 11,§12.4/ 8)

  • @Claudiu到了时间的开头. (4认同)