首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >堆栈std::vector作用域

堆栈std::vector作用域
EN

Stack Overflow用户
提问于 2012-12-28 18:37:47
回答 3查看 5.5K关注 0票数 7

我是c++的新手,我发现很难理解一些向量行为。我试图实现一个返回int数组的函数,我发现了许多使用如下向量的建议:

代码语言:javascript
复制
vector<int> myFunc()
{
    vector<int> myVector;
    //add elements to vector here...
    return myVector;
}

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

EN

Stack Overflow用户

回答已采纳

发布于 2012-12-28 18:42:19

是的,因为myVector是在堆栈上分配的,一旦函数返回,它就会超出作用域。但在这种情况下,这是可以的!您的函数签名是

代码语言:javascript
复制
vector<int> myFunc()

它返回一个myVector的副本,所以它是否超出了作用域并不重要,因为它已经被复制用于返回。

但是,如果您将其更改为类似于

代码语言:javascript
复制
vector<int> & myFunc()

现在你告诉它不要复制myVector,你就会遇到一个叫做悬空引用的问题,因为myVector将被销毁,你没有复制它,但仍然试图使用它。

票数 14
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14068222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档