c++ - 如何使用指针 vector 实现类析构函数 C++

标签 c++ class oop vector destructor

如果我在类中有类和指针 vector ,我应该如何编写析构函数以正确释放内存? 正确吗?

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

或者我也应该从 vector 中删除元素吗?或者还有其他解决方案吗?

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

最佳答案

If I have class and vector of pointers in class how should I write destructor to properly free memory? Is it correct?

这取决于。

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

Or should I also erase elements from vector?

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

删除 vector 的元素是没有意义的,因为它马上就会被销毁。

Or any other solutions?

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

关于c++ - 如何使用指针 vector 实现类析构函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48195732/

相关文章:

oop - 在 Matlab 中设置对象的属性

C++11 与 R 和 Rcpp : supported by CRAN policies?

c++ - "LPVOID"不能分配给X类型的实体

java - 为什么外部 Java 类可以访问内部类私有(private)成员?

c++ - 如果我声明一个没有名字的类实例,它会留在内存中吗?

ruby-on-rails - rails - after_update 发生在新对象的 .save 上

c++ - 为什么在 C++14 中对数组的初始化仍然需要双括号?

std::greater 和 std::less 上的 C++11 条件表达式出现不同类型的错误

c++ - 通过函数调用 C++ 中的线程更改对象属性

oop - 如何确定哪个类应该有指定的方法