Having a usual Base -> Derived hierarchy, like:
class Fruit { ... };
class Pear : Fruit { ... };
class Tomato : Fruit { ... };
std::vector m
Don't use raw pointers, use std::unique_ptr
like this:
std::vector> m_fruits;
And as you can't copy construct a std::unique_ptr
you must use emplace_back
(although you can use push_back
with std::move
).
m_fruits.emplace_back(new Pear());
m_fruits.emplace_back(new Tomato());
Edit:
As it appears that using std::vector
and new
can leak if the std::vector
needs and fails to reallocate memory, my recommended approach (until C++14 introduces std::make_unique
) is to use push_back
like this:
m_fruits.push_back(std::unique_ptr(new Pear()));
m_fruits.push_back(std::unique_ptr(new Tomato()));
Or using std::make_unique
:
m_fruits.push_back(std::make_unique());
m_fruits.push_back(std::make_unique());