gpt4 book ai didi

c++ - 在删除指向动态分配对象的指针 vector 中的元素之前,我需要做什么?

转载 作者:IT老高 更新时间:2023-10-28 21:54:57 25 4
gpt4 key购买 nike

我有一个 vector ,我用指向对象的指针填充。我正在努力学习良好的内存管理,并且有几个一般性问题:

  1. 当我完成 vector 后,是否必须循环遍历它并在每个指针上调用 delete?
  2. 为什么我不必在没有 new 语句的情况下对 vector 或我声明的任何其他变量调用 delete,但必须对指针调用 delete?
  3. 如果 vector 在返回的函数中声明(导致 vector 超出范围),C++ 是否会为我释放指针的内存?

最佳答案

  1. 是的
  2. vector 是使用模板内存分配器实现的,该分配器会为您处理内存管理,因此它们有些特殊。但作为一般经验法则,由于堆栈和堆分配之间的差异,您不必对未使用 new 关键字声明的变量调用 delete .如果在堆上分配了东西,则必须将其删除(释放)以防止内存泄漏。
  3. 没有。在遍历所有元素时,您必须明确调用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com