堆栈std::vector作用域
Stack std::vector scope
我是c++的新手,我发现很难理解一些向量行为。我试图实现一个函数来返回int数组,我发现许多建议使用像这样的向量:
vector<int> myFunc()
{
vector<int> myVector;
//add elements to vector here...
return myVector;
}
但是从我所知道的'myVector'是在堆栈上创建的对象,所以当函数结束时,它是不是超出了作用域?什么时候调用它的析构函数?我知道还有一些关于返回向量的其他问题,但我需要澄清这一点,希望没有重复的问题。
是的,因为myVector
是在堆栈上分配的,一旦函数返回,它就会超出作用域。但在这种情况下,这没关系!函数签名是
vector<int> myFunc()
返回myVector
的副本,所以它超出作用域并不重要,因为它已经被复制返回。
但是如果你把它改成
vector<int> & myFunc()
现在你告诉它不要复制myVector
,你会有一个问题,称为悬空引用,因为myVector
将被破坏,你不复制它,但仍然尝试使用它
您的代码返回堆栈上myVector
实例的副本。所以没关系,它超出了作用域并被删除了(在返回之后)。
它确实超出了作用域,但是当您返回一个类或结构时,编译器会自动为您创建一个副本,以便您的接收对象填充原始对象的内容。
类似于:vector<int> a;
vector<int> b;
... fill in vector a with stuff ...
b = a;
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- gdb函数从本地作用域调用std::vector会导致错误
- 类中vector的作用域问题
- 堆栈std::vector作用域