c语言强制类型转换详解,c语言类型转换注意点本期是C++基础语法分享的第九节, 今天给大家来分享一下:
(1)智能指针;
(2)强制类型转换运算符;
(3)运行时类型信息 (RTTI);
C++ 标准库(STL)中
头文件:#include <memory>
C++ 98:
std::auto_ptr<std::string> ps (new std::string(str));【c语言强制类型转换详解,c语言类型转换注意点】C++ 11:
shared_ptr
unique_ptr
weak_ptr
auto_ptr(被 C++11 弃用)
Class shared_ptr 实现共享式拥有(shared ownership)概念 。 多个智能指针指向相同对象, 该对象和其相关资源会在 “最后一个 reference 被销毁” 时被释放 。 为了在结构较复杂的情景中执行上述工作, 标准库提供 weak_ptr、bad_weak_ptr 和 enable_shared_from_this 等辅助类 。
Class unique_ptr 实现独占式拥有(exclusive ownership)或严格拥有(strict ownership)概念, 保证同一时间内只有一个智能指针可以指向该对象 。 你可以移交拥有权 。 它对于避免内存泄漏(resource leak)——如 new 后忘记 delete ——特别有用 。
多个智能指针可以共享同一个对象, 对象的最末一个拥有着有责任销毁对象, 并清理与该对象相关的所有资源 。
支持定制型删除器(custom deleter), 可防范 Cross-DLL 问题(对象在动态链接库(DLL)中被 new 创建, 却在另一个 DLL 内被 delete 销毁)、自动解除互斥锁
weak_ptr 允许你共享但不拥有某对象, 一旦最末一个拥有该对象的智能指针失去了所有权, 任何 weak_ptr 都会自动成空(empty) 。 因此, 在 default 和 copy 构造函数之外, weak_ptr 只提供 “接受一个 shared_ptr” 的构造函数 。
可打破环状引用(cycles of references, 两个其实已经没有被使用的对象彼此互指, 使之看似还在 “被使用” 的状态)的问题
unique_ptr 是 C++11 才开始提供的类型, 是一种在异常时可以帮助避免资源泄漏的智能指针 。 采用独占式拥有, 意味着可以确保一个对象和其相应的资源同一时间只被一个 pointer 拥有 。 一旦拥有着被销毁或编程 empty, 或开始拥有另一个对象, 先前拥有的那个对象就会被销毁, 其任何相应资源亦会被释放 。
unique_ptr 用于取代 auto_ptr
被 c++11 弃用, 原因是缺乏语言特性如 “针对构造和赋值” 的 std::move 语义, 以及其他瑕疵 。
auto_ptr 可以赋值拷贝, 复制拷贝后所有权转移;unqiue_ptr 无拷贝赋值语义, 但实现了move 语义;
auto_ptr 对象不能管理数组(析构调用 delete), unique_ptr 可以管理数组(析构调用 delete[] );
static_cast
用于非多态类型的转换
不执行运行时类型检查(转换安全性不如 dynamic_cast)
通常用于转换数值数据类型(如 float -> int)
可以在整个类层次结构中移动指针, 子类转化为父类安全(向上转换), 父类转化为子类不安全(因为子类可能有不在父类的字段或方法)
向上转换是一种隐式转换 。
dynamic_cast
用于多态类型的转换
执行行运行时类型检查
只适用于指针或引用
对不明确的指针的转换将失败(返回 nullptr), 但不引发异常
可以在整个类层次结构中移动指针, 包括向上转换、向下转换
const_cast
用于删除 const、volatile 和 __unaligned 特性(如将 const int 类型转换为 int 类型 )
reinterpret_cast
用于位的简单重新解释
滥用 reinterpret_cast 运算符可能很容易带来风险 。 除非所需转换本身是低级别的, 否则应使用其他强制转换运算符之一 。
- c语言比较三个数大小输出最小数,三个数比大小c语言输出最大值
- 瑞士说什么语言
- 什么精油瘦腿最好?
- 速卖通店铺类型无法申请是为何?有哪些原因?
- 品牌鞋有哪些类型,鞋都有哪几种品牌
- 二战时期,美国实行的是自愿性的征兵制还是强制性的义务兵役制?
- 感谢教师节感恩老师的语言
- 如何强制自己到点就睡,保持身心健康?
- pr总是蓝屏怎么解决
- 汉语言文学专业就业方向 毕业后做什么工作
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
