【发布时间】:2013-08-19 09:14:08
【问题描述】:
将std::vector<unique_ptr<int> > 的所有权转移到正在构建的类的正确方法是什么?
下面是我想要做的代码表示。我意识到无论是通过值还是通过引用将向量传递给构造函数,它都是不正确的(不会编译)并且违反了“唯一性”。我希望 Foo 成为向量的新所有者,并希望调用函数放弃所有权。我需要构造函数获取std::unique_ptr<std::vector<std::unique_ptr<int> > > 来执行此操作吗?
Foo.h
class Foo
{
public:
Foo(vector<std::unique_ptr<int> > vecOfIntPtrsOwnedByCaller);
private:
vector<std::unique_ptr<int> > _vecOfIntPtrsOwnedByFoo;
}
Foo.cpp
Foo::Foo(std::vector<std::unique_ptr< int> > vecOfIntPtrsOwnedByCaller)
{
_vecOfIntPtrsOwnedByFoo = vecOfIntPtrsOwnedByCaller;
}
任何帮助将不胜感激 - 我已经在网上搜寻了正确的方法来做到这一点。谢谢!
【问题讨论】:
-
std::vector<std::unique_ptr<int>>需要一个临时的,或者调用者在他们自己的向量上使用std::move,因为它不能被复制进去。如果你想让它变得非常明确,考虑@ 987654327@。之后,使用std::move进入您的成员(在成员初始化程序中!)。 -
您希望向量是唯一拥有的,还是其中包含的元素?
-
轨道上的亮度竞赛 - 两者兼而有之。
-
Xeo - 感谢您的回复。我现在只是在阅读右值引用。如果我理解正确,构造函数应该对向量进行右值引用并执行 _vecOfIntPtrsOwnedByFoo(std::move(vecOfIntPtrsRvalRefence))。我不完全清楚如何使传递给构造函数的向量成为临时/右值。我试图传递给构造函数的向量是另一个类的全局变量。
标签: c++ c++11 stdvector unique-ptr ownership