【发布时间】:2020-03-16 00:36:15
【问题描述】:
我正在学习使用共享指针。
假设我们有两个类,Base 和 Derived(继承自 Base),没有多态性(没有虚方法,除了析构函数)和一个循环:
for (std::shared_ptr<Base>& pB : collection)
{
<downcast>
...
}
就代码质量、良好实践、性能或任何其他原因而言,以下哪一项是最好的<downcast>?
(1) Derived& d = static_cast<Derived&>(*pB);
(2) Derived& d = *(std::static_pointer_cast<Derived>(pB).get());
【问题讨论】:
-
第一。 static_pointer_cast 仅用于制作该共享指针的副本,在这种情况下您不需要。
-
如果您在 CRTP 中执行此操作,则两者都可以。否则,两者同样糟糕。
-
Base和Derived进行“传统”继承:class Derived : public Base {...}
标签: c++ c++11 shared-ptr