C++11智能指標shared_ptr的向上轉upcast向下轉downcast

來源:互聯網
上載者:User

#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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.