Alex Rivera | Logout

How to intentionally delete a boost::shared_ptr?

Asked 2009-03-07T03:15:00.103
45

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.

Edit
Report

1 Answer

4

What you want to do is return weak references using boost::weak_ptr that can be converted to a shared_ptr when needed. This can allow you to control the lifetime of the object in the shared_ptr and those that want to access it can hold onto the weak_ptr and try to convert to a shared_ptr. If that convert fails, then they can re-query and bring the object back into memory.

answered 2009-04-18T03:48:56.283

Your Answer