
Carrying around a fat deleter in every pointer instance is what I consider a no-go.
Nevertheless, there are many scenarios where it would be important. And in
keeping with the well-understood interfaces of shared_ptr and unique_ptr, I
strongly suggest it would be demanded by the community.
By all means have a specialisation of the deleter's implementation for this
case - it's a useful optimisation.
Some scenarios where you'd want a "fat" deleter:
1. you need to return objects to a pool
2. you need to release a semaphore
3. you need to post a notification on a message queue
4. deletion is necessarily constrained by accessing a mutex.
5. the deleter isn't actually fat - it's a stateless class such as
std::default_delete!
I still agree that a type-erased-deleter-unique_ptr is useful. One that
could only accept a function pointer as the deleter would be surprising to
anyone who has had contact with unique_ptr or shared_ptr. I could not
support this constraint.
On 21 March 2017 at 16:00, Andrey Semashev via Boost
On 03/21/17 17:53, Richard Hodges via Boost wrote:
A poly_deleter really should not hold just a function pointer as a deleter. The custom deleter may be any function, containing any amount of state (it could for example be returning resources to a memory pool, or managing a semaphore).
fixing the deleter type at `void (*)(void*)` is a no-go. It's not useful.
If you want something more generic then just use std::function as a deleter. It's been mentioned earlier in the thread.
Personally though, I don't remember needing anything more elaborate than a `void (*)(void*)` function or similar. Probably because if I need something more advanced, I'll likely choose a virtual destructor or shared_ptr or intrusive_ptr. Carrying around a fat deleter in every pointer instance is what I consider a no-go.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman /listinfo.cgi/boost