c++.stlsoft - Smart pointers, RAII and custom deleters
- Adi Shavit (20/20) Nov 10 2004 Hi,
- Pablo Aguilar (10/30) Nov 10 2004 I asked something along these lines some time ago here...
Hi, Though not exactly related to STLSoft (yet?) I'm posting this here after posting it to c++mod, maybe you'll have some insights for me. I frequently find myself having to use C based APIs to allocate and deallocated resources. Using these APIs requires remembering to deallocate all the resources through special deallocation functions (not to mention exception safety). I would really like a general "smart pointer/resource" or raii_ptr<> class that I can access as a regular pointer and that accepts a custom deallocator. Though boost::shared_ptr might suffice, it seems to convay the wrong message since these resources are generally noncopyable nor sharable. All I really need is scope_ptr with a custom deleter. I was wondering why boost::scoped_ptr does not support custom deleters. Is there a rational behind this? In this article (http://www.artima.com/cppsource/bigtwo3.html#refs), Bjorn Karlsson and Matthew Wilson propose such a hypothetical RAII class for demonstration purposes. Does anyone know of a more production-level implementation of such an idea? Thanks, Adi
Nov 10 2004
I asked something along these lines some time ago here... I remember two things: 1) Loki's SmartPtr has a StoragePolicy, which, when customized allows you to also cutomize the deallocation process 2) Matthew said he'd do his lightweight compiler-friendly version some time in the future though he's always lacking time... Someone else said he'd come up with a quick way to do it using Loki's SmartPtr, though I can't seem to find the post in the newsgroup, sorry... "Adi Shavit" <adish gentech.co.il> wrote in message news:cmtsrp$1cm$1 digitaldaemon.com...Hi, Though not exactly related to STLSoft (yet?) I'm posting this here after posting it to c++mod, maybe you'll have some insights for me. I frequently find myself having to use C based APIs to allocate and deallocated resources. Using these APIs requires remembering to deallocate all the resources through special deallocation functions (not to mention exception safety). I would really like a general "smart pointer/resource" or raii_ptr<> class that I can access as a regular pointer and that accepts a custom deallocator. Though boost::shared_ptr might suffice, it seems to convay the wrong message since these resources are generally noncopyable nor sharable. All I really need is scope_ptr with a custom deleter. I was wondering why boost::scoped_ptr does not support custom deleters. Is there a rational behind this? In this article (http://www.artima.com/cppsource/bigtwo3.html#refs), Bjorn Karlsson and Matthew Wilson propose such a hypothetical RAII class for demonstration purposes. Does anyone know of a more production-level implementation of such an idea? Thanks, Adi
Nov 10 2004
Mind readers!! Only last night I was using my raii class (in the as yet unreleased stlsoft/raii.hpp file), and pondering the really nicest way to do these things. The one I've curerntly got is not very pretty (hence the fact that I've not shared it with the world as yet). FYI: I'm currently working 14hrs a day for my current client - who'd have thought real work could be so hard after spending two years writing a book! ;) - but as soon as that's over in about 3 weeks I'll be catching up on many things for a couple of months, including this and other STLSoft issues Bjorn's got the flu at the moment, but I'll send him a heartless email telling him to start thinking about this stuff while he whiles away the hours feeling sorry for himself. :-) Cheers Matthew "Pablo Aguilar" <paguilarg hotmail.com> wrote in message news:cmu0hb$6ca$1 digitaldaemon.com...I asked something along these lines some time ago here... I remember two things: 1) Loki's SmartPtr has a StoragePolicy, which, when customized allowsyou toalso cutomize the deallocation process 2) Matthew said he'd do his lightweight compiler-friendly version sometimein the future though he's always lacking time... Someone else said he'd come up with a quick way to do it using Loki's SmartPtr, though I can't seem to find the post in the newsgroup,sorry..."Adi Shavit" <adish gentech.co.il> wrote in message news:cmtsrp$1cm$1 digitaldaemon.com...afterHi, Though not exactly related to STLSoft (yet?) I'm posting this heresharable.posting it to c++mod, maybe you'll have some insights for me. I frequently find myself having to use C based APIs to allocate and deallocated resources. Using these APIs requires remembering to deallocate all the resources through special deallocation functions (not to mention exception safety). I would really like a general "smart pointer/resource" or raii_ptr<> class that I can access as a regular pointer and that accepts a custom deallocator. Though boost::shared_ptr might suffice, it seems to convay the wrong message since these resources are generally noncopyable norAll I really need is scope_ptr with a custom deleter. I was wondering why boost::scoped_ptr does not support custom deleters. Is there a rational behind this? In this article (http://www.artima.com/cppsource/bigtwo3.html#refs), Bjorn Karlsson and Matthew Wilson propose such a hypothetical RAII class for demonstration purposes. Does anyone know of a more production-level implementation of such an idea? Thanks, Adi
Nov 10 2004
Just to let you know, I've got this sorted and it'll be out in 1.8.3 (which I hope to release within the next fortnight). FYI: Bjorn Karlsson and I are planning a mini series on smart pointers in our Smart Pointers column (for The C++ Source), and there are going to be quite a few new (or revamped) smart pointers appearing in STLSoft soon as a consequence. "Matthew" <admin stlsoft.dot.dot.dot.dot.org> wrote in message news:cmv2rg$1ka4$1 digitaldaemon.com...Mind readers!! Only last night I was using my raii class (in the as yet unreleased stlsoft/raii.hpp file), and pondering the really nicest way to do these things. The one I've curerntly got is not very pretty (hence the fact that I've not shared it with the world as yet). FYI: I'm currently working 14hrs a day for my current client - who'd have thought real work could be so hard after spending two years writing a book! ;) - but as soon as that's over in about 3 weeks I'll be catching up on many things for a couple of months, including this and other STLSoft issues Bjorn's got the flu at the moment, but I'll send him a heartless email telling him to start thinking about this stuff while he whiles away the hours feeling sorry for himself. :-) Cheers Matthew "Pablo Aguilar" <paguilarg hotmail.com> wrote in message news:cmu0hb$6ca$1 digitaldaemon.com...I asked something along these lines some time ago here... I remember two things: 1) Loki's SmartPtr has a StoragePolicy, which, when customized allowsyou toalso cutomize the deallocation process 2) Matthew said he'd do his lightweight compiler-friendly version sometimein the future though he's always lacking time... Someone else said he'd come up with a quick way to do it using Loki's SmartPtr, though I can't seem to find the post in the newsgroup,sorry..."Adi Shavit" <adish gentech.co.il> wrote in message news:cmtsrp$1cm$1 digitaldaemon.com...afterHi, Though not exactly related to STLSoft (yet?) I'm posting this heresharable.posting it to c++mod, maybe you'll have some insights for me. I frequently find myself having to use C based APIs to allocate and deallocated resources. Using these APIs requires remembering to deallocate all the resources through special deallocation functions (not to mention exception safety). I would really like a general "smart pointer/resource" or raii_ptr<> class that I can access as a regular pointer and that accepts a custom deallocator. Though boost::shared_ptr might suffice, it seems to convay the wrong message since these resources are generally noncopyable norAll I really need is scope_ptr with a custom deleter. I was wondering why boost::scoped_ptr does not support custom deleters. Is there a rational behind this? In this article (http://www.artima.com/cppsource/bigtwo3.html#refs), Bjorn Karlsson and Matthew Wilson propose such a hypothetical RAII class for demonstration purposes. Does anyone know of a more production-level implementation of such an idea? Thanks, Adi
Dec 14 2004
This is now available in 1.8.3 beta 1. It's scoped_handle, in inprogress/stlsoft/scoped_handle.hpp Please consult the release notes about the directory structure / dependencies stuff "Matthew" <admin.hat stlsoft.dot.org> wrote in message news:cpmfi2$1agd$1 digitaldaemon.com...Just to let you know, I've got this sorted and it'll be out in 1.8.3 (which I hope to release within the next fortnight). FYI: Bjorn Karlsson and I are planning a mini series on smart pointers in our Smart Pointers column (for The C++ Source), and there are going to be quite a few new (or revamped) smart pointers appearing in STLSoft soon as a consequence. "Matthew" <admin stlsoft.dot.dot.dot.dot.org> wrote in message news:cmv2rg$1ka4$1 digitaldaemon.com...Mind readers!! Only last night I was using my raii class (in the as yet unreleased stlsoft/raii.hpp file), and pondering the really nicest way to do these things. The one I've curerntly got is not very pretty (hence the fact that I've not shared it with the world as yet). FYI: I'm currently working 14hrs a day for my current client - who'd have thought real work could be so hard after spending two years writing a book! ;) - but as soon as that's over in about 3 weeks I'll be catching up on many things for a couple of months, including this and other STLSoft issues Bjorn's got the flu at the moment, but I'll send him a heartless email telling him to start thinking about this stuff while he whiles away the hours feeling sorry for himself. :-) Cheers Matthew "Pablo Aguilar" <paguilarg hotmail.com> wrote in message news:cmu0hb$6ca$1 digitaldaemon.com...I asked something along these lines some time ago here... I remember two things: 1) Loki's SmartPtr has a StoragePolicy, which, when customized allowsyou toalso cutomize the deallocation process 2) Matthew said he'd do his lightweight compiler-friendly version sometimein the future though he's always lacking time... Someone else said he'd come up with a quick way to do it using Loki's SmartPtr, though I can't seem to find the post in the newsgroup,sorry..."Adi Shavit" <adish gentech.co.il> wrote in message news:cmtsrp$1cm$1 digitaldaemon.com...afterHi, Though not exactly related to STLSoft (yet?) I'm posting this heresharable.posting it to c++mod, maybe you'll have some insights for me. I frequently find myself having to use C based APIs to allocate and deallocated resources. Using these APIs requires remembering to deallocate all the resources through special deallocation functions (not to mention exception safety). I would really like a general "smart pointer/resource" or raii_ptr<> class that I can access as a regular pointer and that accepts a custom deallocator. Though boost::shared_ptr might suffice, it seems to convay the wrong message since these resources are generally noncopyable norAll I really need is scope_ptr with a custom deleter. I was wondering why boost::scoped_ptr does not support custom deleters. Is there a rational behind this? In this article (http://www.artima.com/cppsource/bigtwo3.html#refs), Bjorn Karlsson and Matthew Wilson propose such a hypothetical RAII class for demonstration purposes. Does anyone know of a more production-level implementation of such an idea? Thanks, Adi
Mar 01 2005