gpt4 book ai didi

c++ - 使用 push_back 时,std::unique_ptr 是否移入了 std::vector?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:23 26 4
gpt4 key购买 nike

我有一个关于如何 std::unique_ptr 的问题被插入 std::vector .假设我有一个生成对象的函数,如下所示:

std::unique_ptr<CObject> createObjects()
{
return std::unique_ptr<CObject> (new CObject());
}

现在在我的代码中,我有一个 std::vector<std::unique_ptr<CObjects>> vec然后我像这样插入元素:

vec.push_back(createObjects());

现在我的问题是:unique_ptr 是移动到 vector 中还是被复制了?

最佳答案

unique_ptr 不能被复制构造或复制分配。在 push_back 到 vector 的情况下,它被移动,前提是它是一个 rvalue。要对此进行测试,您可以尝试压入一个左值。这将要求 unique_ptr 是可复制或可分配的,因此会失败:

std::unique_ptr<CObject> p(new CObject());
std::vector<std::unique_ptr<CObject>> vec;
vec.push_back(p); // error!
vec.push_back(std::unique_ptr<CObject>(new CObject())); // OK
vec.push_back(std::move(p)); // OK

关于c++ - 使用 push_back 时,std::unique_ptr 是否移入了 std::vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20501251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com