何时cpp向量中的内存被释放?

时间:2016-07-14 12:31:12

标签: c++ memory memory-management vector destructor

假设我在a.cpp中有一个函数fooRead(void **data),它声明了一个&#34; vector<FOO> x&#34;并从文件中读取100个foo对象。假设我从&#34; b.cpp&#34;中调用fooRead,并将引用传递给&#34; void* data;&#34;使用fooRead(&data);

在foo.cpp中我做*data = x.data()。现在,当函数fooRead结束时,向量超出范围并且会自动销毁。那么这意味着b.cpp中的数据是指向我现在不应该使用的内存吗?

我很困惑何时以及如何销毁向量(称为自动析构函数)。任何帮助真的很感激。我很讨厌!

1 个答案:

答案 0 :(得分:1)

是的,b.cpp中的数据指向释放的内存(永远不应使用释放的内存)。根据{{​​3}},std :: vector析构函数

  

破坏容器。调用元素的析构函数   并且使用的存储空间被解除分配

因此,当向量在fooRead的末尾超出范围时,它的存储(data()的输出)也被释放。