簡體   English   中英

帶有 boost::shared_ptr 的 static_cast?

[英]static_cast with boost::shared_ptr?

帶 boost boost::shared_ptrstatic_cast等價物是什么?

換句話說,我該如何重寫以下內容

Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);

使用shared_ptr時?

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???

使用boost::static_pointer_cast

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);

智能指針有三個強制轉換運算符: static_pointer_castdynamic_pointer_castconst_pointer_cast 它們位於命名空間boost (由<boost/shared_ptr.hpp>提供)或命名空間std::tr1 (由 Boost 或編譯器的 TR1 實現提供)。

作為評論:如果 Derived 實際上是從 Base 派生的,那么您應該使用 dynamic_pointer_cast 而不是 static 強制轉換。 系統將有機會檢測您的演員何時/是否不正確。

值得一提的是,Boost 提供的強制轉換運算符的數量與 TR1 的實現存在差異。

TR1 沒有定義第三個操作符 const_pointer_cast()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM