智能指针 因为bookkeeping area 是共用的,这里不会再 new 其构造函数还可以接受一个 Deleter 和 Allocator(从而可以和 placement new 配合),管理所有类型的 storage...来实现这种语义,其实现为 shared_ptr(ptr2).swap(*this); 或者用 s = shared_ptr(ptr2); 这是创建了另外一个 shared_ptr,然后进行 move ...
1、std::static_pointer_cast():当指针是智能指针时候,向上转换,用static_cast 则转换不了,此时需要使用static_pointer_cast。 2、std::dynamic_pointer_cast():当指针是智能指针时候,向下转换,用dynamic_cast 则转换不了,此时需要使用dynamic_pointer_cast(此处注意:base基类需要至少有一个virtual成员函数(即多态类...
当对引用类型转换失败时,程序抛出一个名为std::bad_cast的异常,该异常定义在typeinfo标准库头文件中。 dynamic_pointer_cast dynamic_pointer_cast与dynamic_cast用法类似,当指针是智能指针时候,向下转换,用dynamic_Cast 则编译不能通过,此时需要使用dynamic_pointer_cast。智能指针的用法可以参考上一篇博客。 ——— ...
//2.智能指针转换 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_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操作符。 总结一下:它们的基本区别,就是dynamci_cast用于裸指针和引用等动态类型的转型,而dynamic_pointer_cast主要用于智能指针的转型。 例子: //注意:dynamic_pointer_cast的模版参数只需要指定到类名即可 std::shared_ptr<ShaderMaterial> shaderMaterial = std::dynamic_pointer...
C:const_cast转换 const_cast用于去除类型的const限定符。主要用于指针或引用类型。 #include<iostream>intmain(){constinti=42;int*p=const_cast<int*>(&i);// const_cast:去除const*p=21;// 修改const变量的值(未定义行为)std::cout<<"int: "<<i<<", int through pointer: "<<*p<<std::endl;retu...
dynamic_pointer_cast主要作用是实现智能指针之间的转换,它能够将基本智能指针按照派生类关系进行向下转换,并返回一个指向派生类的智能指针。这种转换可以保证类型安全,并且能够在运行时进行检查,从而避免出现错误。 二、使用步骤 使用dynamic_pointer_cast需要经过以下几个步骤: 1. 先创建一个基本智能指针,它可以指向基类...
std::dynamic_pointer_cast是C++标准库中的一个函数模板,用于在智能指针之间进行类型转换。它是std命名空间下的一个函数,可以将一个shared_ptr或weak_ptr对象转换为另一个相关类型的shared_ptr对象。 该函数的原型如下: 代码语言:cpp 复制 template<class T, class U> std::shared_ptr<T> dynamic_pointer_cast...
本文将详细介绍dynamic_pointer_cast的用法。 第一步:引入头文件 首先,我们需要引入C++标准库中的<memory>头文件。这个头文件包含了智能指针类template,以及对智能指针的操作。 #include <memory> 第二步:创建原始指针 接下来,我们需要创建一个原始指针,该指针指向需要被智能指针管理的对象。 int* raw_ptr = new ...