c++ - 构建 vector 时如何去除(一个)不必要的拷贝?

标签 c++ c++11 vector temporary-objects

我有一个 class A它处理我的资源(相当大)。现在我需要这些 std::vector<A> vec_of_A (3, A(int N)) 的 vector .问题是 vector首先构造临时对象 A(int N) ,然后从中复制构造三次,然后销毁该临时对象。作为我的A(int N)分配相当大的内存块我最终(暂时)内存需求比我实际需要的大 33%。

如何构造vectorA同时避免不必要的构造函数? (我的 class A 满足所有五个规则)。

编辑: 抱歉,我没有意识到默认构造对象的重要性 A .我的问题是不是关于默认构造函数而是参数化构造函数。

最佳答案

如果你只想默认构造 vector 中的对象,你可以使用

std::vector<A> vec_of_A(some_number);

这将创建 some_number 个默认项。

如果项目不是默认可构建的,则保留您需要的空间,然后使用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

关于c++ - 构建 vector 时如何去除(一个)不必要的拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46893262/

相关文章:

c++ - 如何在模板元程序中做短路条件?

c++ - 为什么我们不能在模板特化的开始/中间使用可变参数模板(以及如何模拟)?

c++ - FFMPEG中的av_opt_set是什么

c++ - 从 vector 中删除元素

loops - SPSS 中循环变量重新编码的语法

c++ - 在批处理模式下使用 QListWidget 时出现闪烁问题

c++ - 错误: variable length array of non-POD element type 'string' (aka 'basic_string<char>' )

Haskell 向量 C++ push_back 类比

c++ - 查找有向图中从根到所有顶点的给定长度的所有路径

c++ - 这是确保隐式类型转换不会发生的合法方法吗