生のポインターを使用しないでください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_back
and を使用すると、メモリの再割り当てが必要で失敗した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>());