《深入浅出c++之4提高类型安全》

4 提高类型安全

4.1 强类型枚举

C++ 98中的非强类型作用域,允许隐式转换为整型,占用存储空间及符号性不确定,都是枚举类的缺点。C++11引入枚举类,即强类型枚举。
强类型枚举优势:

  1. 强作用域,强类型枚举成员的名称不会被输出到其父作用域空间
  2. 转换限制,强类型枚举成员的值不可以与整形隐式地相互转换
  3. 可以指定底层类型。强类型枚举默认的底层类型为int,但也可以显示地指定底层类型,具体方法在枚举名称后面加上":type",type是除了wchar_t以外的任何整型,如:
enum class Weight: char {General, Light, Medium, Heavy};

4.2 堆内存管理:只能指针与垃圾回收

4.2.1 C++ 11的智能指针
  1. unique_ptr
    不能与其它unique_ptr类型的指针对象共享所指的内存。
unique_ptr<int> up1(new int(11));
unique_ptr<int> up2 = up1; //编译错误
unique_ptr<int> up3 = move(up1); //现在up3是数据唯一的upique_ptr智能指针。
  1. shared_ptr
    实现上采用引用计数,其中一个shard_ptr指针放弃所有权(reset()),其它shared_ptr对对象的引用并不会受到影响。只有引用计数归0时,shared_ptr才会真正释放所占有的堆内存的空间。
  2. weak_ptr
    可以指向shared_ptr指针指向的对象内存,却不拥有该内存(不会增加引用计数),使用weak_ptr成员的lock,返回其指向内存的一个shared_ptr对象,且在所指对象内存已经无效时,返回nullptr,这个能够验证share_ptr智能指针的有效性。
void check(weak_ptr<int> &wp) {
	shared_ptr<int> sp = wp.lock();
	if (sp != nullptr) {
		cout << "still " << *sp << endl;
	} else {
		cout << "pointer is invalid." << endl;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值