I have many boost::shared_ptr<MyClass>
objects, and at some point I intentionally want to delete
some of them to free some memory. (I know at that point that I will never need the pointed-to MyClass
objects anymore.) How can I do that?
I guess you can't just call delete()
with the raw pointer that I get with get()
.
I've seen a function get_deleter(shared_ptr<T> const & p)
in boost::shared_ptr
, but I'm not sure how to use it, and also it says experimental right next to it. (I think I have Boost 1.38.)
Maybe just assign a new empty boost::shared_ptr
to the variable? That should throw away the old value and delete it.
You just do
ptr.reset();
See the shared_ptr manual. It is equivalent to
shared_ptr<T>().swap(ptr)
You call reset
on every smart pointer that should not reference the object anymore. The last such reset
(or any other action that causes the reference count drop to zero, actually) will cause the object to be free'ed using the deleter automatically.
Maybe you are interested in the Smart Pointer Programming Techniques. It has an entry about delayed deallocation.