C++ 风格指南 5 来自 Google 的奇技

5.1. 所有权与智能指针

1. 总述:
   - 动态分配的对象最好有单一且固定的所有主,并通过智能指针传递所有权。

2. 定义:

   -所有权是一种登记/管理动态内存和其它资源的技术
   - 所有权是管理动态内存和其他资源的技术,涉及对象或函数负责在不再使用时销毁对象
   - 智能指针通过重载`*`和`->`运算符来自动化所有权登记工作。

3. 智能指针类型:
   - `std::unique_ptr`:表示独一无二的所有权,不可复制,可移动。
   - `std::shared_ptr`:表示可共享的所有权,可复制,对象在最后一个所有者销毁时被销毁。

4. 优点:
   - 清晰的所有权安排有助于管理动态分配的内存。
   -传递对象的所有权, 开销比复制来得小, 如果可以复制的话。

   - 简化了对象生命周期的协调工作。
   - 提高了代码的可读性。
   - 简化了代码,减少了错误。
   - 对于`const`对象,智能指针比深度复制更高效

5. 缺点:
   - 指针语义比值语义复杂,特别是在API中。
   - 值语义的开销常被高估,所有权传递的性能提升可能不足以弥补可读性和复杂度的损失
   - API若依赖所有权传递,可能限制客户端的内存管理模型。
   - 智能指针使资源释放位置不明显。
   - `std::unique_ptr`的move语法可能迷惑程序员
   - 引入共享所有权可能需要系统重构
   - 共享所有权的运行时登记可能有较大开销
   - 极端情况下(如循环引用)共享所有权的对象可能永不销毁
   - 智能指针不能完全代替原生指针。

6. 结论:
   - 倾向于保持所有权在分配者手中,通过拷贝或非所有权改变的指针/引用传递。
   - 倾向于使用`std::unique_ptr`明确所有权传递。
   - 避免使用共享所有权,除非避免昂贵的拷贝操作且对象不可变。
   - 如果使用共享所有权,建议使用`std::shared_ptr`。
   - 不要使用`std::auto_ptr`,而应使用`std::unique_ptr`代替

scoped_ptr 和 auto_ptr 已过时. 现在是 shared_ptr 和 unique_ptr 的天下。

5.2. Cpplint

> 总述

使用 cpplint.py 检查风格错误.

> 说明

cpplint.py 是一个用来分析源文件, 能检查出多种风格错误的工具. 它不并完美, 甚至还会漏报和误报, 但它仍然是一个非常有用的工具. 在行尾加 // NOLINT, 或在上一行加 // NOLINTNEXTLINE, 可以忽略报错.

某些项目会指导你如何使用他们的项目工具运行 cpplint.py. 如果你参与的项目没有提供, 你可以单独下载 cpplint.py

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值