Using std::unique_ptr with standard containers
-
08-10-2019 - |
Question
I've been looking for a way to do safe vectors and maps of dynamic pointers, when I realized C++11 adds unique_ptr
s. I looked into how to use them on Google, but have been unsuccessful in looking for details. What I need to know are the following:
- What, exactly, is different between pointers and
unique_ptr
s besides automatic memory collection? - How would I go about removing a
unique_ptr
from a vector or map? Is there any special code I have to use besides erasing the iterator?
Solution
- Nothing. A
unique_ptr
is just a wrapper around a pointer, which deletes the pointer when theunique_ptr
is destroyed. It has no overhead (just like theauto_ptr
template it replaces). - Nope -- it will just work. The difficulty actually comes from inserting the pointer into the vector or map -- whereas you must move the
unique_ptr
into the container.
OTHER TIPS
The difference is that unique_ptr obeys move semantics. Further, as the name suggests, you can't make copies of it.
Erasing an element of
std::vector<std::unique_ptr<T> >
will effectively delete whatever that pointer pointed at.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow