dynamic_pointer_cast 是 C++ 标准库中的一个函数模板,用于在智能指针之间进行动态类型转换。它接受一个 shared_ptr 或 weak_ptr,并将其转换为另一个类型的 shared_ptr。这种转换只能在具有继承关系的类之间进行。 dynamic_pointer_cast 的语法如下: 代码语言:txt 复制 template<class T, class U> shared_ptr<...
spDeriveDown= dynamic_pointer_cast<CDerive>(spBaseDown);if(spDeriveDown == NULL)//由于会进行类型的检查,这边是返回NULLcout <<"spDeriveDown is null"<<endl;/*shared_ptr<CDerive> spDeriveDown; shared_ptr<CBase> spBaseDown; spBaseDown = make_shared<CDerive>(); spDeriveDown = dynamic_po...
spDeriveDown= dynamic_pointer_cast<CDerive>(spBaseDown);if(spDeriveDown == NULL)//由于会进行类型的检查,这边是返回NULLcout <<"spDeriveDown is null"<<endl;/*shared_ptr<CDerive> spDeriveDown; shared_ptr<CBase> spBaseDown; spBaseDown = make_shared<CDerive>(); spDeriveDown = dynamic_po...
Dynamic cast to shared_ptr.SyntaxCopy template <class Ty, class Other> shared_ptr<Ty> dynamic_pointer_cast(const shared_ptr<Other>& sp); ParametersTy The type controlled by the returned shared pointer. Other The type controlled by the argument shared pointer. sp The argument shared pointer....
1. `std::dynamic_pointer_cast` 用于 `std::shared_ptr` 智能指针。 2. `dynamic_cast` 用于原生指针或引用。 此外,`std::dynamic_pointer_cast` 在转换过程中还会维护 `std::shared_ptr` 的引用计数,这是它特有的特性。在使用 `std::dynamic_pointer_cast` 时,如果原始指针能成功转换为目标类型,那么转...
dynamic_pointer_cast不是语言关键字,在标准库<memory>中定义,位于std命名空间中,专用于智能指针shared_ptr的转换。可以理解为智能指针领域的dynamic_cast操作符。 总结一下:它们的基本区别,就是dynamci_cast用于裸指针和引用等动态类型的转型,而dynamic_pointer_cast主要用于智能指针的转型。 例子: //注意:dynamic_po...
std::dynamic_pointer_cast的别名是dynamic_pointer_cast,它是该函数的常用简称。 该函数的作用是将一个指向基类的shared_ptr或weak_ptr对象转换为指向派生类的shared_ptr对象。它会检查指针的动态类型,如果类型匹配,则返回指向派生类的shared_ptr对象;如果类型不匹配,则返回一个空的shared_ptr对象。 std::dynamic_...
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<Ty*>(sp.get()) 对象是否返回 null 指针;否则返回的资源由 spshared_ptr 类拥有的<Ty> 对象。 dynamic_cast<Ty*>(sp.get()) 绑定表达式是有效的。 示例 // std_tr1__memory__dynamic_pointer_cast.cpp // compile with: /EHsc #include <memory> #include <iost...
std::shared_ptr<T> static_pointer_cast( const std::shared_ptr<U>& r ) noexcept; (1) (since C++11) template< class T, class U > std::shared_ptr<T> static_pointer_cast( std::shared_ptr<U>&& r ) noexcept; (2) (since C++20) ...