1、std::static_pointer_cast():当指针是智能指针时候,向上转换,用static_cast 则转换不了,此时需要使用static_pointer_cast。 2、std::dynamic_pointer_cast():当指针是智能指针时候,向下转换,用dynamic_cast 则转换不了,此时需要使用dynamic_pointer_cast(此处注意:base基类需要至少有一个virtual成员函数(即多态类...
智能指针和dynamic_cast是C++中用于处理多态类型的工具。 智能指针是一种类模板,它封装了原始指针,并在其析构函数中自动释放所分配的内存。智能指针可以防止内存泄漏,因为它们在不再需要时自动释放内存。智能指针可以用于任何类型的指针,包括裸指针和多态类型。 dynamic_cast是一种运行时类型识别(RTTI)机制,它允许在运...
static_cast静态类型转换: 1、void* 转换为任意类型的指针 2、任意类型的指针转换为void* 3、编译器允许的跨类型转换,比如char类型转换为int类型,double转int型 4、做基类与派生类的转换,派生类转换成基类是安全的,基类转换成派生类是不安全的,因为往往子类的内容比父类多。static_cast不提供安全性检查 ...
reinterpret_pointer_cast() (C++17标准引入) 如图所示,指针p1、p2指向同一块内存地址。 5.weak_ptr智能指针 常用的成员函数: reset():重置智能指针,使它所持有的资源为空。 swap():交换两个智能指针所管理的资源。 expired():检查weak_ptr所指向的资源是否有效,返回true的时候,垃圾回收进程就会清除该指针所指向...
_M_assign(__p, __n); } template<typename _Tp1> friend void __enable_shared_from_this_helper(const __shared_count<>& __pn, const enable_shared_from_this* __pe, const _Tp1* __px) noexcept { if (__pe != 0) __pe->_M_weak_assign(const_cast<_Tp1*>(__px), __pn); } ...
方法/步骤 1 首先创建一个基类和一个子类,注意定义了Print函数用于测试,并且是虚函数 2 定义存储指向子类的基类智能指针变量,然后调用dynamic_pointer_cast转换为类型为子类的智能指针变量 3 编译运行输出的打印信息如下,能够正常调用子类的Print函数 4 定义存储指向子类的子类智能指针变量,然后调用dynamic_pointer_...
{ std::unique_ptr<A> b(newB);returnb; }intmain() { auto o= Get();//如何转换为 std::unique_ptr<B> ?system("pause");return0; } 需取出原始指针: B* ptr= dynamic_cast<B*>(o.get()); intmain() { auto o=Get(); std::cout<< typeid(o).name() <<std::endl; ...
any库提供类型安全。所有满足any需求的类型都能够被赋值,但是解开的时候需要知道解开类型。any_cast是解开由any保存着的值的钥匙,any_cast与dynamic_cast的工作机制是类似的-指针类型的类型转换通过返回一个空指针成功或者失败,因此赋值类型的类型转换抛出一个异常(bad_any_cast)而失败。
static_pointer_cast() reinterpret_pointer_cast() (C++17标准引入) 如图所示,指针p1、p2指向同一块内存地址。 5.weak_ptr智能指针 常用的成员函数: reset():重置智能指针,使它所持有的资源为空。 swap():交换两个智能指针所管理的资源。 expired():检查weak_ptr所指向的资源是否有效,返回true的时候,垃圾回收...