Mic*_*hal 2 c++ vector temporary-objects c++11
我有一个class A处理我的资源(非常大).现在我需要一个这样的矢量std::vector<A> vec_of_A (3, A(int N)).问题是vector首先构造临时对象A(int N),然后从中复制构造三次然后销毁该临时对象.由于我A(int N)分配了相当大的内存,我最终(暂时)内存需求比实际需要大33%.
如何在避免不必要的构造函数vector的A同时构建?(我class A满足所有五条规则).
编辑:对不起,我没有意识到默认构造对象的重要性A.我的问题不是默认构造函数,而是参数化构造函数.
如果您只想在矢量中默认构造对象,则可以使用
std::vector<A> vec_of_A(some_number);
Run Code Online (Sandbox Code Playgroud)
这将创建some_number默认项目.
如果项目不是默认构造的,那么reserve您需要的空间然后用于emplace_back构建元素.看起来像
std::vector<A> vec_of_A;
vec_of_A.reserve(some_number);
for (int i = 0; i < some_number; ++i)
vec_of_A.emplace_back(/*constructor parameter(s) here */); // construct an object
Run Code Online (Sandbox Code Playgroud)