【问题标题】:Should I clean up ivar C++ vector...?我应该清理 ivar C++ 向量吗...?
【发布时间】:2011-03-26 12:03:24
【问题描述】:

如果一个向量被放入栈中,它会在其自动变量作用域结束时被自动销毁。

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

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

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

【问题讨论】:

    标签: c++ memory-management vector raii


    【解决方案1】:

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

    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
    }
    

    【讨论】:

    • 如果析构函数没有明确声明和定义?
    • @Eonil :只要您声明 vector&lt;B&gt; bs 其中 B 不是指针类型就没有关系。一切都会自动销毁。但是,如果您声明vector&lt;B*&gt; bs,并使用new 创建的元素填充它,那么您必须编写析构函数或其他方式来手动销毁bs(即所有元素)。底线是:如果您使用new,那么您必须在代码中的某处使用delete 对应的new。具体在哪里取决于您的课程设计和实际场景!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      相关资源
      最近更新 更多