
Merrill Cornish wrote:
With an ordinary C++ pointer, if I have a BaseClass and a DerivedClass derived from BaseClass, then I can do
BaseClass* objectPtr; objectPtr = new DerivedClass();
Later, if BaseClass has a virtual destructor, I can call delete(objectPtr) and the DerivedClass destructor will be called.
Now, does this work with shared_ptr?
shared_ptr<BaseClass> objectPtr; objectPtr = shared_ptr<DerivedClass>(new DerivedClass());
Yes.
and later, delete(objectPtr).
No, but it's because of C++ rules not shared_ptr rules ;-) When the objectPtr goes out of scope the pointee is deleted.
Does any of the magic going on behind the scenes prevent shared_ptrs from being used like this?
It's designed to work like a regular ptr. Make sure to read the docs: http://www.boost.org/libs/smart_ptr/shared_ptr.htm Pay special attention to the TR1 functions http://www.boost.org/libs/smart_ptr/shared_ptr.htm#functions for pointer conversions: static_pointer_cast, const_pointer_cast, and dynamic_pointer_cast. -- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org - grafik/redshift-software.com -- 102708583/icq - grafikrobot/aim - Grafik/jabber.org