
"Daniel Lidström" <daniel.lidstrom@sbg.se> wrote in message news:E1F34343C3A0804BB3E29ABBFCBBAF0C01BCE3@ADA...
Hello,
I want to use the shared_ptr with objects that are allocated using a factory. The problem is the deallocation. It has to be done with a ``manager'' class. For example, here is how the allocation and deallocation has to be done:
PxyFileData& geo_file = dynamic_cast<PxyFileData&>(fileMan.New("geo")); fileMan.Close(geo_file);
I would like to be able to put shared_ptr<PxyFileData>'s into a std::vector and then forget about the deallocation. I.e. fileMan.Close(...) should be done automatically when the objects aren't needed anymore. But since the deallocation isn't simply delete, how can I do this?
Thanks!
-- Daniel SBG AB
If fileMan.Close received pointers, you could do the following: shared_ptr<PxyFileData> ptr( &geo_file , boost::bind( boost::mem_fn(&<fileMan's type here>::Close) , &fileMan , _1 ) ); If Close doesn't take pointers, I guess you could use Boost.Lambda's bind instead (to dereference _1, so you'd write *_1), but since I haven't used it, I can't say for sure, the syntax should be about the same I think... HTH Pablo Aguilar