|
Boost Users : |
Subject: Re: [Boost-users] [shared_ptr] boost::shared_ptr deleter question
From: Tamas.Ruszkai_at_[hidden]
Date: 2015-08-14 10:00:47
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_at_[hidden]>
To: boost-users_at_[hidden],
Date: 14.08.2015 15:50
Subject: Re: [Boost-users] [shared_ptr] boost::shared_ptr deleter
question
Sent by: "Boost-users" <boost-users-bounces_at_[hidden]>
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_at_[hidden] http://lists.boost.org/mailman/listinfo.cgi/boost-users
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net