c++ - 资源管理- vector 和指针

标签 c++ pointers c++11 vector initialization

我需要存储 ThirdPartyElm 类型的元素序列,我使用的是 std::vector(或 std::array 如果我需要一个固定大小的序列)。

我想知道我应该如何初始化序列。第一个版本创建一个新元素,并且(如果我是对的)在将元素插入到序列中时创建该元素的拷贝:

for (int i = 0; i < N; i++)
{
   auto elm = ThirdPartyElm();
   // init elm..
   my_vector.push_back(elm);  // my_array[i] = elm;
}

第二个版本存储一系列指针(或更好的 c++11 智能指针):

for (int i = 0; i < N; i++)
{
   std::unique_ptr<ThirdPartyElm> elm(new ThirdPartyElm());
   // init elm..
   my_vector.push_back(std::move(elm));  // my_array[i] = std::move(elm);
}

哪个是最轻量级的版本?

请突出显示任何错误。

最佳答案

你可以只用大小声明它,它会调用这些元素的默认构造函数。

std::vector<ThirdPartyElem> my_vector(N);

就你的说法

The first version creates a new element and (if I'm right) creates a copy of the element when it is inserted in the sequence

别担心。由于 ele 是一个即将超出范围的局部变量,您的编译器可能会使用 copy elision这样将调用 move 而不是 copy

上面我说错了,请无视

关于c++ - 资源管理- vector 和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27321768/

相关文章:

c++ - 编译时指针 "does not have a type"?

c++ - enable_if 函数在不应该定义的时候定义

c++ - 在 C++ 中读取和写入西里尔文文件

c++ - 将 Autotools 用于新的共享库

c - int *p; 有什么问题? *p=23;

c++ - 将类内初始化的 const 成员传递给 Base 构造函数?

c++ - 解压 ts... 到 t0.a(), t0.b(), t1.a(), t1.b(),

c++ - 如何用 Cython 包装 C++ 类?

c++ - isDown() 与 isChecked() 的区别

c++ - 在不创建新 int[size] 的情况下声明数组时出现 SIGSEGV 错误