哪种转换更好,有什么区别?
class Base
{};
class Derived : public Base, public std::enable_shared_from_this<Derived>
{};
int main(int argc, const char * argv[])
{
std::shared_ptr<Base> ptr1 = std::dynamic_pointer_cast<Base>(std::shared_ptr<Derived>(new Derived())); // version 1
std::shared_ptr<Base> ptr2 = std::shared_ptr<Derived>(new Derived()); // version 2
return 0;
}
与其他用例一样shared_ptr
,你应该更喜欢使用make_shared
而不是构建shared_ptr
手动:
std::shared_ptr<Base> ptr2 = std::make_shared<Derived>();
这本质上是您的版本 2,加上的各种好处make_shared http://herbsutter.com/2013/05/29/gotw-89-solution-smart-pointers/.
版本 1 做了很多不必要的事情:首先构建一个临时的shared_ptr<Derived>
, 然后你dynamic_cast
其内容指向基类指针(而static_cast
在这里就足够了)然后将该指针存储在不同的shared_ptr<Base>
。因此,您有很多不必要的运行时操作,但与版本 2 相比,在类型安全方面没有任何优势。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)