我应该清理ivar C ++ vector ...?

时间:2011-03-26 12:03:25

标签: c++ memory-management vector raii

如果向量放置在堆栈中,它将在其自动变量范围的末尾自动销毁。

如果我在某个类中放置了一个矢量怎么办?

class A
{
    vector<B> bs;  // B is POD struct.
};

我应该手动清理吗?如果是这样,我该怎么办?

2 个答案:

答案 0 :(得分:4)

当封闭类的析构函数(即bs的析构函数)被调用时,将导致该向量A被破坏。

void f()
{
    {
          A a;
          //working with a;

    }//<--- here a goes out of scope, so it's destructor is called; 
            //so not only a is destructed but also a.bs
}

答案 1 :(得分:0)

确保在向量中使用的每个B类在析构函数中删除自己分配的空间,因此当向量超出范围时,不会留下内存泄漏