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

时间:2012-06-12 03:25:03

标签: c++ memory-management vector

我有一个包含vector成员变量的类。 我知道存储在堆栈中的向量将是 当他们离开时清理(即没有内存) 范围,但我不确定是否破坏了 class对象 - 包含vector成员变量 - 被认为超出了范围。

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

EG:

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?
    }
 }

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我认为你不需要为矢量调用DTOR。一旦对象超出范围,就会调用DTOR,这意味着fred的DTOR被调用。

答案 3 :(得分:0)

永远只有一种方法来摧毁一个物体,那就是它的析构函数(相反,你可以用几种方式构造物体)。 STL容器专门设计用于避免数据结构内的这种微观内存管理。如果您必须在STL容器中显式分配或释放内存,那么您做错了。