通过std::static_pointer_cast<Base>对指向该对象的shared_ptr(类型为shared_ptr<Base>)进行转换(代码行4),转换成std::shared_ptr<Deriver>类型的shared_ptr对象(将该指向派生类的"指针"转换为指向基类的“指针”,这里之所以用引号包围指针二字,因为其并不是裸指针而是智能指针shared_ptr对象) 为了查看转换之后的...
template <typename T,typename U> shared_ptr<T> static_pointer_cast(const shared_ptr<U>& r); 要对保存在shared_ptr里的指针执行static_cast,我们可以取出指针然后强制转换它,但我们不能把它存到另一个shared_ptr里;新的shared_ptr会认为它是第一个管理这些资源的。解决的方法是用static_pointer_cast,使...
将shared_ptr<Derived>转换为shared_ptr<Base>可以通过静态指针转换函数static_pointer_cast来完成。 shared_ptr是C++智能指针的一种,用于管理动态分配的对象。shared_ptr允许多个指针共享同一个对象,并自动释放对象内存当引用计数为零时。 在C++继承关系中,可以使用shared_ptr<Base>来管理派生类Derived的对象,但是...
template <typename T,typename U> shared_ptr<T> static_pointer_cast(const shared_ptr<U>& r); static_pointer_cast不会抛出异常。 使用shared_ptr的演示样例代码例如以下: { shared_ptr<int> pInt1; assert(pInt1.use_count() == 0); // 还没有引用指针 { shared_ptr<int> pInt2(new int(5))...
1));//方式3 reset,如果原有的shared_ptr不为空,会使原对象的引用计数减1std::shared_ptr<int> p4 = std::make_shared<int>( 2);//方式4 一般来说std::make_shared是最推荐的一种写法。 增加计数 被引用则会增加计数 std::shared_ptr<int>ptr2(sp2);//再次被引用则计数+1 ...
要对保存在shared_ptr里的指针运行static_cast。我们能够取出指针然后强制转换它,但我们不能把它存到还有一个shared_ptr里;新的shared_ptr会觉得它是第一个管理这些资源的。解决办法是用static_pointer_cast,使用这个函数能够确保被指对象的引用计数保持正确。
const_cast const_pointer_cast static_cast static_pointer_cast dynamic_cast dynamic_pointer_cast 最后一个小问题:以前,boost中的shared_ptr的cast函数的名字是:shared_xxxx_cast, 后来,为了IDE自动提供帮助,改成了xxxx_pointer_cast。由此可见,设计库还是要用户至上。
很简单,这是一个函数。shared_ptr<T>是返回值 函数名称:static_pointer_cast;参数const shared_ptr<U>&r'就这么简单。补充:那不叫取址。。那叫引用。你难道这点c++基础都没有?那你还敢看Boost源码?
void f(shared_ptr<Base> c) { if (dynamic_pointer_cast<A>(c).get()) { static_pointer_cast<A>(c)->show1(); } else if (dynamic_pointer_cast<B>(c).get()) { static_pointer_cast<B>(c)->show2(); } } int main() {
pointer_cast的实现 智能指针的类型转换无法通过static_cast等实现,需要使用static_pointer_cast方法(想一下如果取裸指针出来static_cast会发生什么)。static_pointer_cast是通过shared_ptr一个特殊的构造函数实现的。 template<classT,classU>std::shared_ptr<T>static_pointer_cast(conststd::shared_ptr<U>&r)noexc...