static_cast 与 boost::shared_ptr?

发布于 2024-07-14 12:50:59 字数 348 浏览 10 评论 0原文

boost::shared_ptr 等效的 static_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 = ???

What is the equivalent of a static_cast with boost::shared_ptr?

In other words, how do I have to rewrite the following

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

when using shared_ptr?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情泪▽动烟 2024-07-21 12:50:59

使用boost::static_pointer_cast:

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

Use boost::static_pointer_cast:

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
怎言笑 2024-07-21 12:50:59

智能指针共有三个强制转换运算符:static_pointer_castdynamic_pointer_castconst_pointer_cast。 它们位于命名空间 boost(由 提供)或命名空间 std::tr1(由 Boost 提供)中或通过编译器的 TR1 实现)。

There are three cast operators for smart pointers: static_pointer_cast, dynamic_pointer_cast, and const_pointer_cast. They are either in namespace boost (provided by <boost/shared_ptr.hpp>) or namespace std::tr1 (provided either by Boost or by your compiler's TR1 implementation).

羁绊已千年 2024-07-21 12:50:59

作为评论:如果 Derived 实际上是从 Base 派生的,那么您应该使用dynamic_pointer_cast 而不是静态强制转换。 系统将有机会检测到您的演员表何时/是否不正确。

As a comment: if Derived does in fact derive from Base, then you should use a dynamic_pointer_cast rather than static casts. The system will have a chance of detecting when/if your cast is not correct.

云仙小弟 2024-07-21 12:50:59

值得一提的是,Boost 提供的转换算子数量与 TR1 的实现存在差异。

TR1没有定义第三个运算符const_pointer_cast()

It is worth to mention that the there is difference in the number of casting operators provided by Boost and implementations of TR1.

The TR1 does not define the third operator const_pointer_cast()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文