c++ - 从函数返回 vector 而不破坏它

标签 c++ heap-memory stack-memory

我遇到了一个有趣的问题。我在 C++ 中有一个函数,它返回一个充满类的 vector 。返回 vector 后,它会为作为 vector 中元素的每个类调用解构函数。

问题很明显:数据在类指向指针的地方被销毁,当对象被销毁时,指针被释放。我只能假设调用解构函数是因为 vector 在堆栈上,而不是在堆上。

那么问题是:

有没有办法保持从函数返回 vector 而不被破坏?或者我是否必须传递一个指向返回 vector 的指针作为函数的输入?

最佳答案

您可以使用new 在堆上创建任何东西。您不应该从函数中给出对堆栈对象的引用,因为它们会在函数完成后立即被销毁。

如果您希望您的函数按值 返回 vector ,请确保 vector 中的对象实现复制构造函数(也许还有赋值运算符,对此不确定)。有了这个,请不要忘记 Rule of Three .

关于c++ - 从函数返回 vector 而不破坏它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984816/

相关文章:

c++ - 在资源文件中查找控件

c - 堆损坏 - 调试断言失败。在 dbgheap.c 行 1322 表达式 _crtIsValidHeapPointer(pUserData)

c - 存储比堆更多的字节

c++ - 为什么堆上的分配比栈上的分配快?

c++ - 抽象类的堆分配

c++ - 对可变长度数组使用 alloca() 是否比在堆上使用 vector 更好?

c++ - Werror 不会将所有警告都变成错误

c++ - 在 DS 上将颜色数据数组保存为 PNG 文件

c++ - std::vector<T> 是否只包含它需要的元素的确切数量或额外的空间?

java - 年老代需要多满才能触发主 GC 周期?