std::vector<unique_ptr<int> >
の所有権を構築するクラスに移す適切な方法は何ですか?std :: vector <std :: 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 ::ベクトルは、<はstd :: unique_ptrを>'のいずれかが必要です'std :: vector <...> &&'を考えてみてください。これは本当に明示的にしたい場合は、 'std :: vector <...> &&'を考えてください。その後、 'std :: move'を使ってメンバ初期化子の中に移動してください。 –
Xeo
ベクターを一意に所有したい、またはその中に含まれる要素にしたいですか? –
軌道の明るさの競争 - 両方。 – Jen