构建向量时如何去除(一个)不必要的副本?
How to get rid of (one) unnecessary copy when constructing a vector?
我有一个 class A
来处理我的资源(相当大)。现在我需要这些 std::vector<A> vec_of_A (3, A(int N))
的向量。问题是 vector
首先构造临时对象 A(int N)
,然后从中复制构造三次,然后销毁该临时对象。由于我的 A(int N)
分配了相当大的内存块,我最终(暂时)的内存需求比我实际需要的大 33%。
如何构造A
的vector
同时避免不必要的构造函数? (我的 class A
满足所有五个规则)。
编辑: 抱歉,我没有意识到默认构造对象的重要性 A
。我的问题是不是关于默认构造函数而是参数化构造函数。
使用std::vector::resize()
方法用不需要从初始临时对象复制的3个默认构造项填充向量:
std::vector<A> vec_of_A;
vec_of_A.resize(3);
如果您只想默认构造向量中的对象,您可以使用
std::vector<A> vec_of_A(some_number);
这将创建 some_number
个默认项。
如果这些项目不是默认可构建的,那么 reserve
您需要的 space 然后使用 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
我有一个 class A
来处理我的资源(相当大)。现在我需要这些 std::vector<A> vec_of_A (3, A(int N))
的向量。问题是 vector
首先构造临时对象 A(int N)
,然后从中复制构造三次,然后销毁该临时对象。由于我的 A(int N)
分配了相当大的内存块,我最终(暂时)的内存需求比我实际需要的大 33%。
如何构造A
的vector
同时避免不必要的构造函数? (我的 class A
满足所有五个规则)。
编辑: 抱歉,我没有意识到默认构造对象的重要性 A
。我的问题是不是关于默认构造函数而是参数化构造函数。
使用std::vector::resize()
方法用不需要从初始临时对象复制的3个默认构造项填充向量:
std::vector<A> vec_of_A;
vec_of_A.resize(3);
如果您只想默认构造向量中的对象,您可以使用
std::vector<A> vec_of_A(some_number);
这将创建 some_number
个默认项。
如果这些项目不是默认可构建的,那么 reserve
您需要的 space 然后使用 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