|
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