cpp 向量中的内存何时解除分配
When is the memory in the cpp vector deallocated?
假设我在a.cpp中fooRead(void **data)
了一个函数,它声明了一个" vector<FOO> x
"并从文件中读取100个foo对象。假设我从"b.cpp"调用fooRead,并使用fooRead(&data);
传递对"void* data;
在foo.cpp我做*data = x.data()
.现在之后,当函数 fooRead 结束时,向量超出范围并会自动销毁。那么这是否意味着 b.cpp 中的数据指向我现在不应该使用的内存?
我对何时以及如何销毁向量(称为自动析构函数)感到非常困惑。任何帮助真的非常感谢。我有点卡住了!
是的,b.cpp 中的数据指向释放的内存(永远不应使用释放的内存)。根据 cpp 首选项,std::vector 析构函数
破坏容器。元素的析构函数称为 并且已用存储已解除分配。
因此,当向量在 fooRead 结束时超出范围时,它的存储(data()
的输出)也被释放。
相关文章:
- 指针会被解除分配吗?
- 基于浅树的数据结构的内存分配器,用于频繁分配和解除分配
- 解除分配矩形 2D 数组会根据尺寸产生错误
- 为什么在正确解除分配内存时出现内存泄漏?
- 堆栈变量超出范围时是否解除分配?
- 如何在不使用 "new" 关键字的情况下解除分配创建的对象的内存?
- 在 QStandardItemModel 中解除分配项目
- 解除分配此特定 2D 阵列的内存
- C++删除数组只会解除分配第一项
- 在 c++ 中使用向量解除分配
- 与解除分配堆数组相关的语法混淆
- 解除分配与 C++ 中的结构关联的所有内存
- 是否随作用域分配和解除分配堆栈帧
- 如果我使用 std::function 来捕获 lambda,我应该担心它被解除分配吗?
- 如果清除了 std::map 是否确保内存被解除分配
- 在另一个结构中的结构内解除分配指针
- 由 strcpy 设置的解除分配字符 * 时内存泄漏?
- 自定义内存分配和多个继承类的解除分配
- libpq错误消息解除分配
- cpp 向量中的内存何时解除分配