c++ - 按值返回对象 vector

标签 c++ c++11

我想知道以下是否是返回对象的深层 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/

相关文章:

c++ - 数组中的多线程写操作

c++ - 嵌套模板和构造函数

c++ - std 库映射到 boost 库

c++ - wifstream 中的 seekg 和 imbue 工作错误

c++ - Boost Spirit 像语法一样解析 XML

c++ - 参数化和 "function template partial specialization is not allowed"

c++ - 纯抽象类和派生类型的实例化

c++ - 为什么在 shared_ptr 只取一个时 unique_ptr 取两个模板参数?

lambda - 我应该将 lambda 设为静态吗?

c++ - 使用reverse_iterator STL错误解密upper_bound