|
Boost Users : |
From: Rene Rivera (grafik.list_at_[hidden])
Date: 2005-11-26 14:19:31
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
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net