【深入理解C++11】第五章 提高类型安全

5.1强类型枚举

普通枚举在全局区域存在相同的名字则会编译异常例如:

enum Type{General, Light, Medium};
enum Category{General, Light, Medium};

C++11引入强类型枚举,即“枚举类”。

enum class Type{General, Light, Medium};

他有以下几点优势:

  1. 强作用域,强类型枚举成员的名称不会被输出到其父作用域空间
  2. 转换限制,不可以与整型隐式转换
  3. 可以指定类型
enum class Type:char {General, Light, Medium};

Type是基于char类型的强类型枚举。
另外需要注意的是由于enum class是强类型作用域的,所以可能匿名enum class 什么也做不了!

enum class Type {General, Light, Medium} weapon;
weapon = Type::General; //无法通过编译

5.2 堆内存管理:智能指针与垃圾回收

5.2.1

引用程序内存异常问题经常是以下(C++/C)原因:

  1. 野指针(程序可能崩溃)
  2. 重复释放(程序崩溃)
  3. 内存泄漏(虚拟内存用尽,一般在32位机器上)
5.2.2 C++11智能指针
  1. unique_ptr 唯一内存引用,可以移动不可复制
  2. shared_ptr 引用计数引用指针
  3. weak_ptr 弱引用指针
5.2.3 垃圾回收的分类
  1. 基于引用的计数,例如操作系统的内核对象,文件句柄引用等等。
  2. 基于跟踪处理的垃圾回收器
    (1). 标记-清除,正在使用的对象视为根对象,从根对象到引用所有堆空间进行标记,没有被标记的对象就被认为是垃圾,第二次就会被清掉。对象不会被移动,但是会有大量内存碎片问题。
    (2). 标记-整理,类似于标记清除,但是它将对象向左靠齐,解决了内存碎片问题。
    (3). 标记-拷贝,将堆分为2个部分From和To,在From中找出活对象拷贝到To中,From剩余全部是垃圾,To此时是紧靠排列的,接下来From和To交换角色即可。它的问题就是堆内存利用率只有一半。
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值