c ++在析构函数中删除向量类成员内存

ban*_*ong 3 c++ memory-management vector

我有一个包含vector成员变量的类.我知道当它们超出范围时,存储在堆栈中的向量将被清除(即内存空闲),但我不确定类对象的破坏 - 包含向量成员变量 - 是否被认为是超出范围.

如果不是,那么破坏向量的适当方法是什么?

例如:

class fred {
    char *stuff;
    vector<int> v;

    fred() : stuff(), v() {}
    ~fred() {
         if (stuff) free(stuff);
         // now how do I clear up the vector v?  Will it be done automatically?
    }
 }
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 6

矢量已经为你清理了!当一个类被破坏时,它的所有成员析构函数也被调用.在这种情况下,v调用析构函数,它会清除它分配的内容.

当你}按照它们被声明的相反顺序到达析构函数的结束时,将调用非静态成员的dtors .然后调用你的基类析构函数(如果存在).


mta*_*med 0

当您销毁 fred 的实例时,将调用向量的析构函数。

  • `v` 不一定在堆栈上!这取决于“fred”的这个实例是否分配在堆栈上 (2认同)