如果我在类中有类和指针 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/