堆上的C++向量而不是堆栈

Ale*_*lex 6 c++ heap stack

我遇到了一个有趣的问题.我在C++中有一个函数,它返回一个充满类的向量.返回向量后,它会为向量中元素的每个类调用deconstrustor.问题很明显,数据被破坏,其中类指向在销毁对象时释放的指针.我只能假设解调器被调用,因为vector不在堆栈上.

所以问题是:无论如何都要保持从函数返回向量而不被销毁?或者我是否必须传递一个指针返回向量作为函数的输入.

亚历克斯

Vla*_*lad 4

您可以使用 .在堆上创建任何内容new。您不应该从函数中给出对堆栈对象的引用,因为一旦函数完成,它们就会被销毁。

如果您希望函数按返回向量,请确保向量内的对象实现复制构造函数(也许还有赋值运算符,对此不确定)。话虽如此,请不要忘记三法则

  • @Alex:不,你需要 `std::vector<int>* pResult = new std::vector<int>();`。并且您需要以“pResult->push_back(...)”而不是“result.push_back(...)”来访问向量。 (3认同)
  • @Alex:另一种方法是函数获取向量作为参数(指针或引用),并用内容填充它。从资源管理的角度来看,这种方式实际上可能更好:您不需要关心堆上向量的释放。 (2认同)