2012-08-30 8 views
5

私は、抽象クラスのオブジェクトにstd :: unique_ptrを返す関数を使用するループを得ました。私はこれらのオブジェクトをpush_backを介してstd :: vectorに格納したい。オブジェクトは抽象型であるため、しかし、私は次のエラーを取得する:std :: unique_ptrで与えられた抽象クラスのオブジェクトのベクトルを格納する方法は?

細胞は抽象型の std::vectorあると cellのタイプが

std::unique_ptr<AbstractType>&& cell 
ある
error: cannot allocate an object of abstract type 
ラインの

cells.push_back(std::move(*cell)); 

(私は実際にcellをハンドラクラスに渡します) 抽象型をインスタンス化することはできません。 std:move演算子を理解すると、何らかの形でオブジェクトをインスタンス化する必要がありますか?

問題の管理方法を教えてもらえますか?または、関数(プロジェクトの私の一部ではない)が抽象型のオブジェクトへのユニークなポインタを返さないのでしょうか?

+6

「ベクトル」について話していますか?それは動作しません。代わりに 'vector >'を格納してください。 –

+0

あなたは正しいです!私は目が見えませんでした。私は 'vector >'に変更しました。 – soriak

+0

@ R.MartinhoFernandes:あなたのコメントに+1してください。あなたは心を読む必要があります! –

答えて

9

std::vectorに直接AbstractType要素を格納することはできません。 unique_ptr自体をstd::vector<std::unique_ptr<AbstractType>>に保存してcells.push_back(std::move(cell))とするだけです。

+0

コピーコンストラクタを呼び出しているため、抽象クラスをインスタンス化しようとしているからです。 –

関連する問題