按值返回对象的向量
Returning a vector of objects by value
我想知道以下内容是否是返回对象深度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
}
特别是,返回的向量如何不包含对堆栈内存位置的引用?
是否安全取决于MyClass
.但是假设它是一个具有价值语义的行为良好的类,那么是的,它是完全安全的。 std::vector
按值存储其对象。执行此操作时:
objects.push_back(obj);
obj
的副本被放入向量中(假设你实际上有一个向量,而你没有)。当你返回向量时,它被移动到调用函数(尽管这个移动可以并且通常被优化掉)。
NO.
objects.push_back(obj);
局部变量,即 obj,被复制到向量中。因此,向量将不包含对局部变量的引用。
顺便说一下,你不能定义这样的向量:
std::vector<MyClass> objects();
实际上,这是一个函数声明:一个名为 objects 的函数,它没有参数,并返回一个 std::vector。
相反,您应该这样做:
std::vector<MyClass> objects;
在这种情况下,objects.push_back(obj);
调用 std::vector::p ush_back 的T const&
版本,它将复制参数。
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 迭代时从向量和内存中删除对象
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 如何创建从同一类继承的不同对象的向量
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 从多个源构造一个对象,包括一个对象向量
- 在C 中,是否有可能在不兼容类型的std ::向量对象之间传输不同类型的缓冲区
- 将向量对象存储在共享指针投掷错误中
- E0312,C2664尝试将向量对象作为函数参数传递时错误
- 相对于向量对象的两个成员,找到两个向量的相交的有效方法
- 将数据从文件读取到向量对象
- C 向量对象访问
- 向量对象声明后的括号是什么意思
- 2向量对象指向相同的分配内存
- 如何返回向量对象
- 传递单个或向量对象时没有重载函数的实例
- 指向数组和向量对象的指针
- 向量对象库,可以存储其他对象类型的对象
- 如何从另一个向量/对象集构造新的向量/指针集