假设我在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中的数据是指向我现在不应该使用的内存吗?
我很困惑何时以及如何销毁向量(称为自动析构函数)。任何帮助真的很感激。我很讨厌!
答案 0 :(得分:1)
是的,b.cpp中的数据指向释放的内存(永远不应使用释放的内存)。根据{{3}},std :: vector析构函数
破坏容器。调用元素的析构函数 并且使用的存储空间被解除分配。
因此,当向量在fooRead的末尾超出范围时,它的存储(data()
的输出)也被释放。