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

543

被折叠的 条评论
为什么被折叠?



