5

std::unique_ptr を抽象クラスのオブジェクトに返す関数を使用するループが発生しました。これらのオブジェクトを push_back 経由で std::vector に格納したいと考えています。しかし、オブジェクトは抽象型であるため、次のエラーが発生します。

error: cannot allocate an object of abstract type

ラインのために

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

ここで、セルはstd::vector抽象型でcellあり、型です

std::unique_ptr<AbstractType>&& cell

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

問題を管理する方法を教えてくれる人はいますか? または、関数 (プロジェクトの私の部分ではない) は、抽象型のオブジェクトへの一意のポインターを返すべきではありませんか?

4

1 に答える 1

9

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

于 2012-08-30T19:54:20.580 に答える