C++11智能指针shared_ptr的向上转upcast向下转downcast

本文通过示例介绍了C++11中智能指针`shared_ptr`的向上转换(upcast)和向下转换(downcast)操作。在代码中展示了`dynamic_pointer_cast`的使用,以及不同转换情况下指针的值。讨论了在多态类继承体系中,如何正确地进行类型转换。


#include <iostream>

#include <memory>


class A{

public:

    virtual ~A() =default;//must have a virtual otherwise complie err: not polymorphic

};

class B: public A{

};


typedef std::shared_ptr<A> APtr;

typedef std::shared_ptr<B> BPtr;


void test_pt(APtr p){

   if (BPtr b =std::dynamic_pointer_cast<B>(p)) {

       std::cout<<"bbb " << b <<std::endl;

    }

   else{

       std::cout<<"nnn" <<std::endl;

    }

}

int main(int argc,constchar * argv[])

{

   void test1();

    

   APtr a(newA());

   BPtr b(newB());

   APtr c(newB());

    

   std::cout<<std::dynamic_pointer_cast<A>(b) <<std::endl;//upcast, not 0

   std::cout<<std::dynamic_pointer_cast<B>(a) <<std::endl;//downcast, 0

   std::cout<<std::dynamic_pointer_cast<B>(c) <<std::endl;//downcast, not 0

    

   test_pt(b);

   std::cout<<"xxx " << b <<std::endl;//not 0

    

    std::cout <<"Hello, World!\n";

   return0;

}


0x100100a50

0x0

0x100100a80

bbb 0x100100a50

xxx 0x100100a50

Hello, World!

---------refernce------------------

http://msdn.microsoft.com/en-us/library/bb982967.aspx

http://stackoverflow.com/questions/14877626/up-casting-stdshared-ptr-using-stddynamic-pointer-cast

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值