
Philipp Kraus
Am 08.12.2012 um 18:43 schrieb Lars Viklund:
On Sat, Dec 08, 2012 at 06:24:08PM +0100, Philipp Kraus wrote:
On 2012-12-08 17:45:07 +0100, Andrew Holden said:
I would ini tialize the shared pointer like so:
boost::shared_ptr <MyType> ptr;
MyType *temp_ptr = cptr_open(); //Use a temporary pointer to avoid
initializing the shared pointer with null.
if (temp_ptr) ptr.reset(temp_ptr, &cptr_close); //Now discard temp_ptr
O
http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/shared_ptr.htm#construct...
I found that I can use a ctor with template
shared_ptr(Y * p, D d); and D is a dtor call. Do you have an example for D ? 'D' can be any type whose value 'd' is callable as d(p). This includes, but is not limited to: D: std::function
// friendly wrapper around callables D: void (*)(Y*) // regular function pointer to say void f(Y* p); D: struct D { void operator () (Y* p) const; }; d: [](Y* p) { .. } // lambdas are neat In your case, Andrew outlined how you can pass in a function pointer to your cptr_close, assuming that it has a suitable signature.
The D used in reset() adheres to the same rules as the one in the constructor your found, namely that it'll be invoked when the last sibling shared_ptr perishes.
I'm using the ctor call boost::shared_ptr<mycptr> x ( cptr_open(), cptr_close );
this seems to be working at the moment
Thx
Phil _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
That will work unless cptr_open() returns NULL. If I recall, if cptr_open() returns NULL, then the shared_ptr will report it is initialized correctly even though it contains a NULL pointer, and will call cptr_close (NULL) when it goes out of scope.