4

我有一个包含向量成员变量的类。我知道存储在堆栈上的向量超出范围时将被清理(即释放内存),但我不确定是否考虑销毁包含向量成员变量的类对象超出范围。

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

例如:

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

4 回答 4

7

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

当您以与声明它们的相反顺序到达析构函数的关闭时,将调用非静态成员的 dtor }。然后调用您的基类析构函数(如果存在)。

于 2012-06-12T03:28:20.293 回答
0

I think you need not call DTOR for the vector. The DTOR will be called as soon as the object goes out of scope, meaning the DTOR of fred is Called.

于 2012-06-12T05:49:21.157 回答
0

销毁对象总是只有一种方法,那就是通过其析构函数(相反,您可以通过多种方式构造对象)。STL 容器专门设计用于避免在数据结构中对内存进行这种微管理。如果您必须在 STL 容器中显式分配或释放内存,那么您做错了。

于 2012-06-12T07:06:11.657 回答
0

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

于 2012-06-12T03:28:05.517 回答