我有一个 vector ,我用指向对象的指针填充。我正在努力学习良好的内存管理,并且有几个一般性问题:
- 当我完成 vector 后,是否必须循环遍历它并在每个指针上调用 delete?
- 为什么我不必在没有 new 语句的情况下对 vector 或我声明的任何其他变量调用 delete,但必须对指针调用 delete?
- 如果 vector 在返回的函数中声明(导致 vector 超出范围),C++ 是否会为我释放指针的内存?
最佳答案
- 是的
- vector 是使用模板内存分配器实现的,该分配器会为您处理内存管理,因此它们有些特殊。但作为一般经验法则,由于堆栈和堆分配之间的差异,您不必对未使用
new
关键字声明的变量调用delete
.如果在堆上分配了东西,则必须将其删除(释放)以防止内存泄漏。 - 没有。在遍历所有元素时,您必须明确调用
delete myVec[index]
。
例如:
for(int i = 0; i < myVec.size(); ++i)
delete myVec[i];
话虽如此,如果您打算将指针存储在 vector 中,我强烈建议使用 boost::ptr_vector
它会自动处理删除。
关于c++ - 在删除指向动态分配对象的指针 vector 中的元素之前,我需要做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4061438/