【发布时间】:2016-11-17 08:59:35
【问题描述】:
假设我在 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 中的数据指向我现在不应该使用的内存??
我对何时以及如何销毁向量(调用自动析构函数)感到很困惑。任何帮助都非常感谢。我被卡住了!
【问题讨论】:
-
你能粘贴一些代码吗?我相信案例会更容易理解......
-
请不要描述代码的作用。显示相关代码(不要将这解释为倾倒你的整个 100 行代码)
-
void **data为什么? C++ 有一个非常好的类型系统。学习使用它会让你成为一个更好的 C++ 程序员。std::vector的析构函数在对象超出范围时被调用。就像所有其他析构函数一样。 -
@PiotrNycz:我正在从我们之前编码的遗传算法 C 库中调用一个 cpp 函数(外部 C)。有很多晦涩难懂的代码很难解释这个问题,而不会使阅读时间过长。
-
@Tim :因为我希望 b.cpp 中的数据指向 FOO 的实例。如果我传递了唯一的 var 数据,我最终会对 b.cpp 中的实际位置数据无所事事。请三思而后行
标签: c++ memory memory-management vector destructor