cpp 向量中的内存何时解除分配

When is the memory in the cpp vector deallocated?

本文关键字:何时 解除分配 内存 向量 cpp      更新时间:2023-10-16

假设我在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() 的输出)也被释放。