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

时间:2014-04-04 20:46:15

标签: c++ class instance destructor member

如果我有类似

的话
class Foo { ... }

class UsesFoo {
private:
    Foo foo;
public:
    UsesFoo() : foo(1, 2, 3) { }
}

然后根据我的理解,当我构建UsesFoo(是UsesFoo *myMan = new UsesFoo();UsesFoo myMan;)时,它会创建一个Foo对象,就好像通过调用{{1} }}。当Foo(1, 2, 3)被摧毁时(无论是UsesFoo还是超出范围),内部的delete myMan;也会被破坏。

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

Foo

如果没有,那么我该怎样做才能破坏~UsesFoo() { } ?换句话说,作为类实例的非指针成员变量如何被破坏的语义是什么?

1 个答案:

答案 0 :(得分:5)

  

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

即可。标准,

  

执行析构函数体并破坏体内分配的任何自动对象后,a   类X的析构函数调用X的直接非变量非静态数据成员的析构函数,析构函数   对于X的直接基类,如果X是派生类最多的类(12.6.2),则它的析构函数调用   X虚拟基类的析构函数。

(C ++ 11,§12.4/ 8)