gpt4 book ai didi

c++ - 堆栈 std::vector 作用域

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:33 26 4
gpt4 key购买 nike

我是 C++ 的新手,我发现很难理解某些 vector 行为。我试图实现一个函数来返回一个 int 数组,我发现了很多使用这样的 vector 的建议:

vector<int> myFunc()
{
vector<int> myVector;
//add elements to vector here...
return myVector;
}

但据我所知,“myVector”是在堆栈上创建的对象,所以当函数结束时它不会超出范围吗?它的析构函数什么时候被调用?我知道关于返回 vector 的其他问题很少,但我需要澄清这一点,希望不会重复一个问题。

最佳答案

是的,因为 myVector 是在堆栈上分配的,一旦函数返回,它就会超出范围。但在这种情况下没关系!你的函数签名是

vector<int> myFunc()

它返回 myVector拷贝,所以它超出范围并不重要,因为它已经被复制用于返回。

但是如果你把它改成类似的东西

vector<int> & myFunc()

现在你告诉它不要复制 myVector 并且你会遇到一个称为悬空引用的问题,因为 myVector 将被破坏并且你不要复制它,但仍要尝试使用它。

关于c++ - 堆栈 std::vector 作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14068222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com