生のポインターを使用しないでくださいstd::unique_ptr。次のように使用します。
std::vector<std::unique_ptr<Fruit>> m_fruits;
また、コンストラクト astd::unique_ptrをコピーできないため、使用する必要がありますemplace_back(ただし、push_backと共に使用することはできますstd::move)。
m_fruits.emplace_back(new Pear());
m_fruits.emplace_back(新しいトマト());
編集:
std::vector<std::unique_ptr<T>>::emplace_backand を使用すると、メモリの再割り当てが必要で失敗したnew場合にリークする可能性があるように見えるためstd::vector、私の推奨されるアプローチ (C++14 が導入されるまでstd::make_unique) は、push_back次のように使用することです。
m_fruits.push_back(std::unique_ptr<Fruit>(new Pear()));
m_fruits.push_back(std::unique_ptr<Fruit>(new Tomato()));
または使用std::make_unique:
m_fruits.push_back(std::make_unique<Pear>());
m_fruits.push_back(std::make_unique<Tomato>());