$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Kevlin Henney (Kevlin.Henney_at_[hidden])
Date: 2000-02-08 11:09:31
Miki Jovanovic wrote:
>Here is my proposition for dynamic_cast for shared_ptr. Would this be
>of value?
[snip]
This seems quite involved compared with the one posted on this list a few
weeks ago:
template<typename Target, typename Source>
inline shared_ptr<Target> dynamic_shared_cast(const
shared_ptr<Source> & arg)
{
shared_ptr<Target> result;
if(Target * got = dynamic_cast<Target *>(arg.px))
{
result.px = got;
delete result.pn;
++*(result.pn = arg.pn);
}
return result;
}
The only inefficiency here is that an unused count is allocated and then
discarded because shared_ptr currently counts nulls. My own counted pointer
implementations do not and the control flow was lifted pretty much
straight.
Kevlin