Boost logo

Boost Users :

From: Andrew Holden (aholden_at_[hidden])
Date: 2006-07-12 10:29:43


    foo = boost::shared_ptr<Foo>(new Bar);
    foo = boost::shared_ptr<Bar>(new Bar);

Scott McMurray wrote:
>
> The important difference is in the default deleter. shared_ptr<Foo>'s
> default deleter will call delete on a Foo* while shared_ptr<Bar>'s
> default deleter will call it on a Bar*. Since your base class's
> destructor is virtual, it doesn't make any difference in the example.
> If your destructor were non-virtual, then you'd have to use
> shared_ptr<Bar>(new Bar) to get the correct destructors called. (But
> without any virtual functions, the dynamic casting wouldn't compile.)

Are you sure about that? A check of the documentation lists the
signature for that constructor as

template<class Y> explicit shared_ptr(Y * p);

The explanation is given as follows: [This constructor has been changed
to a template in order to remember the actual pointer type passed. The
destructor will call delete with the same pointer, complete with its
original type, even when T does not have a virtual destructor, or is
void.

The reset function has a similar signature.


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