[shared_ptr] boost::shared_ptr deleter question
Hi All, I wonder when the shared_ptr deleter is destroyed. I have a shared_ptr with a custom deleter. I would expect when the last shared pointer to the object is gone then not only the deleter method will be called, but the deleter function object is also released. As I see the deleter is taken by value and stored by value in the reference counter, so I do not understand what is going on. How is the deleter mean to be freed? Thanks, Tamas struct MyClassDeleter { ~MyClassDeleter() { // Break point is set here } void operator()(MyClass* item) { // Break point is set here } } { auto sharedPtr = boost::shared_ptr<MyClass>(new MyClass, MyClassDeleter) } // shared_ptr leaves the scope here, the custom deleter is called (parenthesis operator) // the deleter instance is however not destroyed, the breakpoint in the destructor does not hit
Tamas,
I find it very surprising that your breakpoint in the destructor is not
being hit at all. This:
#include
Hi Glen,
You are right, my example was not complete.
Finally I have figured the problem out: I had also a weak_ptr somewhere to
the owned class and it did not let the deleter to be removed.
It means:
- Owned class is removed when there is no more strong refrence exist.
- Deleter is destroyed when neither strong nor weak references exist
The reason is: the deleter is stored by value in the reference counter
class.
I guess, theoretically the deleter would be not necessary any more after
the owned object is destroyed, but storing it in the reference counter was
maybe simpler to implement (maybe more efficient as well).
Thanks and sorry for the noise.
Cheers,
Tamas
From: Glen Fernandes
participants (2)
-
Glen Fernandes
-
Tamas.Ruszkai@leica-geosystems.com