我是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将被销毁,你没有复制它,但仍然试图使用它。
发布于 2012-12-28 18:41:25
您的代码返回堆栈上myVector实例的副本。所以它超出了作用域并被删除(在返回后)是可以的。
发布于 2012-12-28 18:42:06
它确实超出了作用域,但当您返回一个类或结构时,编译器会自动为您创建一个副本,以便用原始对象的内容填充您的接收对象。
类似于:
vector<int> a;
vector<int> b;
... fill in vector a with stuff ...
b = a; https://stackoverflow.com/questions/14068222
复制相似问题