std::shared_ptr<Father> father(new Son(son)); 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 此时son就是向上转换。无需显式转换既可以编译通过。 2、dynamic_cast 一般用于有继承关系的类之间的向下转换。 3、dynamic_pointer_cast 当指针是智能指针时候,向下转换,用dynamic_Cast 则编...
可以理解为智能指针领域的dynamic_cast操作符。 总结一下:它们的基本区别,就是dynamci_cast用于裸指针和引用等动态类型的转型,而dynamic_pointer_cast主要用于智能指针的转型。 例子: //注意:dynamic_pointer_cast的模版参数只需要指定到类名即可 std::shared_ptr<ShaderMaterial> shaderMaterial = std::dynamic_pointer...
第一,在容器中存储指向派生类的指针,尽量避免以下dynamic_cast的用法 classWindow { ... };classSpecialWindow:publicWindow {public:voidblink(); ... }; typedef//see Item 13 for infostd::vector<std::tr1::shared_ptr<Window> > VPW;//on tr1::shared_ptrVPW winPtrs; ...for(VPW::iterator iter...
它们的功能和std::static_cast()、std::dynamic_cast、std::const_cast()和std::reinterpret_cast()类似,只不过转换的是智能指针std::shared_ptr,返回的也是std::shared_ptr类型。 1、std::static_pointer_cast():当指针是智能指针时候,向上转换,用static_cast 则转换不了,此时需要使用static_pointer_cast。
当指针是智能指针时候,向下转换,用dynamic_Cast 则编译不能通过,此时需要使用dynamic_pointer_cast。向下转换(含智能指针):struct Father { //基类Father }; struct Son:Father { //基类Father的派生类B }; std::shared_ptr<Father> father; std::shared_ptr<Son> son = std::dynamic_pointer_cast<Son>(...
那就不懂了, dynamic cast到底有什么用... 按照1L的回复我写了如下代码 : //p.h class P{ }; //s.h #include "p.h" class S : public P{ }; //main.cpp #include <iostream> #include "s.h" int main(){ //std::shared_ptr<P> x(new S); //std::shared_ptr<S> y = std::...
`dynamic_cast` 在运行时检查类型的合法性,如果转换合法,则返回转换后的类型;如果不合法,且用于指针,则返回空指针,用于引用,则抛出 `std::bad_cast` 异常。 二者的主要区别在于它们作用的对象类型: 1. `std::dynamic_pointer_cast` 用于 `std::shared_ptr` 智能指针。 2. `dynamic_cast` 用于原生指针或...
shared_ptr<CBase> spBaseDown; spBaseDown = make_shared<CDerive>(); spDeriveDown = dynamic_pointer_cast<CDerive>(spBaseDown); if (spDeriveDown == NULL) //由于会进行类型的检查,这边是返回NULL cout << "spDeriveDown is null" << endl; ...
// std_tr1__memory__dynamic_pointer_cast.cpp // compile with: /EHsc #include <memory> #include <iostream> struct base { virtual ~base() { } int val; }; struct derived : public base { }; int main() { std::shared_ptr sp0(new derived); std::shared_ptr<derived> sp1 = std::dy...
// std_tr1__memory__dynamic_pointer_cast.cpp // compile with: /EHsc #include <memory> #include <iostream> struct base { virtual ~base() { } int val; }; struct derived : public base { }; int main() { std::shared_ptr sp0(new derived); std::shared_ptr<derived> sp1 = std::dy...