我想知道以下是否是返回对象的深层 vector
的安全方法。
class MyClass {
//...
}
std::vector<MyClass> get_list(a,b,c) {
// obj is created on the stack
MyClass obj(a,b,c);
std::vector<MyClass> objects();
objects.push_back(obj);
// objects[0] contains a pointer to a stack variable?
return objects
}
特别是,返回的 vector 如何不包含对堆栈内存位置的引用?
最佳答案
是否安全取决于MyClass
。但假设它是 well behaved class with value semantics ,那么是的,它是绝对安全的。 std::vector
按值存储其对象。当您这样做时:
objects.push_back(obj);
obj
的拷贝被放入 vector 中(假设您实际上有一个 vector ,which you don't)。当您返回 vector 时,它是 moved (虽然这个移动可以而且通常是 optimized away )到调用函数。
关于c++ - 按值返回对象 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38278811/