Re: [boost] FW: Suggestion for boost`s smart pointers

-----Original Message----- From: boost-bounces@lists.boost.org [mailto:boost-bounces@lists.boost.org] On Behalf Of Tobias Schwinger
I was referring to the file pointer, which is pretty much the only "C resource" I use. You're right when it comes to malloc/free, of course - but do we really need it?
Anytime you deal with C atleast, the answer is yes.
I doubt it's good practice for a C library to allocate stuff and hand it to the user who has to then free it or to free stuff that comes from the user...
The other cases are: a) it's up to the user to obtain the memory, so new/delete will work b) the library provides ctor/dtor routines, so custom deleters are needed
Most C libraries have make_X/free_X pairs. So a typical C call could look like: ... struct T * c = make_T(args); do_stuff_with_a_T(c); free_T(c); ... Which I would like to replace with: ... typedef some_ptr<T,Deleter<free_T> > T_ptr; T_ptr c(make_T(args)); do_stuff_with_a_T(c.get()); ...

On Dec 1, 2006, at 5:00 PM, Sohail Somani wrote:
Most C libraries have make_X/free_X pairs. So a typical C call could look like:
... struct T * c = make_T(args); do_stuff_with_a_T(c); free_T(c); ...
Which I would like to replace with:
... typedef some_ptr<T,Deleter<free_T> > T_ptr; T_ptr c(make_T(args)); do_stuff_with_a_T(c.get()); ...
Does this work for you? typedef unique_ptr<T, void (*)(void*)> T_ptr; int args; T_ptr c(make_T(args), std::free); // assumes make_T uses std::malloc do_stuff_with_a_T(c.get()); http://home.twcny.rr.com/hinnant/cpp_extensions/unique_ptr_03.html -Howard
participants (2)
-
Howard Hinnant
-
Sohail Somani