I'm wanting a non-reference counted smart pointer that can combine some of the useful aspects of auto_ptr
and shared_ptr
. I think that C++0x's unique_ptr
is ultimately what I'd need, but I need something that will compile on Visual Studio 2008 and Xcode (gcc 4.2).
The functionality I need is:
- Usable in factory methods so that ownership is transferred on copying (like auto_ptr)
- Supports
release()
(like auto_ptr) - Can be used with forward declaration (like shared_ptr)
So, I suppose it's really a better auto_ptr
. Is there anything that does this in boost or elsewhere (note: I haven't got the time to wrap my head around Loki)? Or should I just roll my own?
EDIT: I've just been reading more about auto_ptr
-- it sounds like you can use it with forward declarations if you ensure that the class header is included in each .cpp file that references the header with the smart pointer (eg see GotW). Anyone got any general advice or rules of thumb on this?
EDIT2: The reason shared_ptr isn't acceptable is because I need a release() method as I'm tidying up some legacy code by introducing factory methods, but it has to co-exist with some manual pointer ownership code. Using shared_ptr throughout the codebase would be great, but a huge task.
EDIT3: In the end, auto_ptr
was adequate for the job once I discovered the quirks of the forward inclusion. It would be interesting also to try writing a custom deleter for shared_ptr
to allow for optional deletion of the pointer.