更新:这个示例中的shared_ptr类似于Boost中的那个,但它不支持shared_polymorphic_downcast(或dynamic_pointer_cast或static_pointer_cast)!
我正在尝试初始化一个指向派生类的共享指针,而不会丢失引用计数:
struct Base { };
struct Derived : public Base { };
shared_ptr<Base> base(new Base());
shared_ptr<Derived> derived;
// error: invalid conversion from 'Base* const' to 'Derived*'
derived = base;
到目前为止都还不错。我没有想到C++会隐式转换Base*指针为Derived*指针。尽管如此,我仍然需要代码中表达的功能(即,在向下转换基类指针时保持引用计数)。我的第一个想法是在Base类中提供一个类型转换运算符,以便可以进行隐式转换到Derived(对于学究们:我会检查向下转换是否有效,不用担心):
struct Base {
operator Derived* ();
}
// ...
Base::operator Derived* () {
return down_cast<Derived*>(this);
}
没什么用,编译器好像完全忽略了我的类型转换运算符。你们有什么想法可以让 shared_ptr 赋值成功吗?附加问题: Base* const
是什么类型?我知道const Base*
是什么意思,但Base* const
中的const
指代什么?