【发布时间】:2023-03-04 21:14:01
【问题描述】:
这里比较两种初始化对象向量的方式。
1.
vector<Obj> someVector;
Obj new_obj;
someVector.push_back(new_obj);
2.
vector<Obj*> ptrVector;
Obj* objptr = new Obj();
ptrVector.push_back(objptr);
第一个push_back是实际对象而不是对象的指针。向量 push_back 是否复制了被推送的值?我的问题是,我有很大的对象和很长的向量,所以我需要找到一种节省内存的最佳方法。
- 第二种方式更好吗?
- 是否有其他方法可以获得对象/指针向量,以便以后找到每个对象并同时使用最少的内存?
【问题讨论】:
-
如果可以的话,它会在 C++11 中移动它,第一个是尝试推送一个函数。
-
@chris 我需要在代码中明确写什么才能让它移动而不是复制?还是使用 C++11 指定编译?或者我不需要写任何东西,它只是为我做的?我的意思是第一个构造函数。
-
我很好奇;你的类的实例有多“巨大”?
-
@LoganYang,
-std=c++11是你所需要的。push_back有一个采用右值引用的重载(如果您像这样单独制作对象并且在不再使用该对象之前不要使用std::move之类的东西来传递它,则不会使用它),还有emplace_back.