我是c++的新手,我发现很难理解一些向量行为。我试图实现一个返回int数组的函数,我发现了许多使用如下向量的建议:
vector<int> myFunc()
{
vector<int> myVector;
//add elements to vector here...
return myVector;
}但据我所知,'myVector‘是在堆栈上创建的对象,所以当函数结束时,它不会超出范围吗?它的析构函数什么时候被调用?我知道关于返回向量的其他问题很少,但我需要澄清这一点,希望不会重复一个问题。
发布于 2012-12-28 18:42:19
是的,因为myVector是在堆栈上分配的,一旦函数返回,它就会超出作用域。但在这种情况下,这是可以的!您的函数签名是
vector<int> myFunc()它返回一个myVector的副本,所以它是否超出了作用域并不重要,因为它已经被复制用于返回。
但是,如果您将其更改为类似于
vector<int> & myFunc()现在你告诉它不要复制myVector,你就会遇到一个叫做悬空引用的问题,因为myVector将被销毁,你没有复制它,但仍然试图使用它。
https://stackoverflow.com/questions/14068222
复制相似问题