繁体   English   中英

如何使用指针向量实现类析构函数C ++

[英]How to implement class destructor with vector of pointers C++

如果我在类中有指针的类和指针矢量,应如何编写析构函数以适当释放内存? 这是正确的吗?

~Class()
{
  for(int i = 0; i<v.size(); i++)
  {
    delete v[i];
  }
}

还是我也应该删除向量中的元素? 或其他解决方案?

~Class()
{
  for(int i = 0; i<v.size(); i++)
  {
    delete v[i];
    v.erase(e.begin() + i);
  }
}

如果我在类中有指针的类和指针矢量,应如何编写析构函数以适当释放内存? 这是正确的吗?

这取决于。

指针是否指向分配了new对象,并且此类是这些动态对象的所有者(即,该类负责它们的销毁)吗? 如果不是,那是不正确的。

还是我也应该删除向量中的元素?

您删除向量元素的示例是错误的。 它会跳过一半的元素,因此不会调用delete所有指针。 第一次迭代后,第一个元素将被擦除,因此下一个元素已移至索引0,但是next循环删除并擦除了索引1中的元素。

删除向量的元素没有任何意义,因为它将立即被破坏。

或其他解决方案?

如果您打算让该类拥有动态分配的对象,则最好使用对象向量而不是指针。 例如,如果需要指针向量来允许运行时多态性,请使用std::unique_ptr向量。 这样,您就不需要实现析构函数,因为自动生成就可以了。

如果您的类应该拥有所指向的对象,那么它足以做到:

for (auto p : v) delete p;

如果向量本身是类的成员,则在破坏类实例对象时,其元素将被删除,您无需手动执行此操作。 在您的示例中,您也做错了。 如果它是std :: vector,则可以调用vector的clear()方法。 否则,您将调用delete [] p; 其中p是指向向量元素本身的指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM