Should I use std::unique_ptr<T> in a std::vector member variable in my class?
c++, c++11, smart-pointers, stl, visual-c++-2012
Solution
If the `MyClass` objects are owned by `C`, then the best option would be the simplest:
std::vector<MyClass>
The only reason I could see for using `std::unique_ptrs` here is if you need to keep pointers to a base class for polymorphism. In this case the unique_ptrs serve the purpose of releasing resources upon destruction of the vector. But then the `C` interface should not transfer ownership to the clients.
Problem
Imagine a `class C` that has a member variable `m_MyList` of type `std::vector` in which I want to store objects of type `MyClass`. `C` has two functions that add or remove objects in `m_MyList`. `m_MyList` should also be made accessible for consumers of `C` as they need to read the collection of `MyClass` objects. The external reader of the collection will have no means to change the collection, thus the `MyClass` objects are owned only by `C`. Now my question: In C++11 style, what is the best T to store in the vector? The possibilities seem to be: - `std::vector<MyClass>` - `std::vector<MyClass*>` - `std::vector<unique_ptr<MyClass>>`, using `std:move` to push the `unique_ptr` into the `vector`