我需要存储 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/