【发布时间】:2017-02-21 14:54:12
【问题描述】:
我是 C++ 新手,所以问题很简单。
假设我已经定义了一个类 Foo,并在以下代码中创建了一个向量向量:
namespace testme {
class Foo {
public:
Foo(int x): x_(x) { };
static vector<vector<int>> ReturnVecOfInts(int num) {
vector<vector<int>> ret(num);
for (int i = 0; i < num; i++) {
vector<int> tmp;
ret.push_back(tmp);
}
return ret;
}
}
当我打电话时:
Foo::ReturnVecOfInts(5)
是在堆或堆栈上创建的向量的向量。引用在堆栈上,但我想知道它是否指向堆,因为我想从函数中返回这个对象。
这对我很重要,因为很明显,如果将它们分配在堆栈上,向量的向量将超出范围,并且在被调用函数之外无法使用。
【问题讨论】:
-
完全取决于该声明所在的位置。如果它在命名空间范围内,则该对象具有静态存储持续时间,既不是堆栈也不是堆。顺便说一句,请不要发布幻想代码:发布真实代码。
-
c++ 标准中没有定义 stack 或 heap 之类的东西。
-
这取决于您使用的系统。这就是为什么 C++ 没有堆栈和堆的概念,而是使用自动和动态存储。
-
通常如果您在函数内部声明它在堆栈上。如果它在堆分配的对象内,那么它也在堆上。这在很大程度上取决于该语句出现的上下文。
-
所以你真正的问题是:按值返回本地对象是否安全?,是吗?
标签: c++