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 <glen.fernandes@gmail.com>
To:        boost-users@lists.boost.org,
Date:        14.08.2015 15:50
Subject:        Re: [Boost-users] [shared_ptr] boost::shared_ptr deleter question
Sent by:        "Boost-users" <boost-users-bounces@lists.boost.org>




Tamas,

I find it very surprising that your breakpoint in the destructor is not
being hit at all. This:
   #include <boost/smart_ptr/shared_ptr.hpp>
   #include <iostream>
   struct D {
       ~D() {
           std::cout << "~D\n";
       }
       template<class U>
       void operator()(U*) {
           std::cout << "operator()\n";
       }
   };
   struct T { };
   int main()
   {
       {
           auto p = boost::shared_ptr<T>(new T, D{});
           std::cout << "...\n";
       }
   }

Outputs:
   ~D
   ~D
   ...
   operator()
   ~D

Glen



--
View this message in context:
http://boost.2283326.n4.nabble.com/shared-ptr-boost-shared-ptr-deleter-question-tp4678852p4678857.html
Sent from the Boost - Users mailing list archive at Nabble.com.
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users