【发布时间】:2010-11-24 09:28:57
【问题描述】:
更新:此示例中的 shared_ptr 与 Boost 中的类似,但它不支持 shared_polymorphic_downcast(或 dynamic_pointer_cast 或 static_pointer_cast)! p>
我正在尝试在不丢失引用计数的情况下初始化指向派生类的共享指针:
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 指的是什么?
【问题讨论】:
-
为什么需要 shared_ptr
而不是 shared_ptr ? -
因为我想在不克隆对象的情况下访问 Derived 中不在 Base 中的功能(我想要一个由两个共享指针引用的对象)。顺便问一下,演员阵容为什么不工作?