Boost logo

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