8. C++ 生命周期回顾

幻灰龙 2021-06-29 22:32:08

上一条:内部共享 下一条:Rust 函数参数上的生命周期(lifetime)标记

 

在继续看 Rust 的生命周期之前,再对 C++ 生命周期做下回顾


C++ 从 C 继承而来,对象生命周期的核心问题是:

  • 对象生命周期
    •     Stack上对象的释放,一旦超出对象的作用域,就自动Destruct对象。
    •     Heap上对象的释放,需要手动delete 来触发Destruct。
  • 对象状态管理
    •     在一个线程内,对象可被多处持有,单线程的多处持有点都可能修改对象的状态
    •     在多个线程内,对象可被多线程持有,多线程可并发地修改对象的状态

先看下对象的生命周期:

  • 单线程
    • Stack对象:
    • Heap对象
  • 多线程
    • Stack对象
    • Heap对象

再看下对象的状态管理:

  • 单线程
    • 不可变对象:可安全使用
    • 可变对象:对象状态需要被`封装`才能处于尽量可控
      • 例如把一个类的成员变量直接暴露出去,到处使用,就会带来封装泄漏,违反单一修改点原则
  • 多线程
    • 不可变对象:可安全使用
    • 可变对象:对象状态处于多线程共享时,需要有互斥机制,例如信号量和互斥锁
      • 并发修改对象,违反单一修改点原则
      • 并发修改对象,如果不加互斥,会带来对象的状态修改处于`非原子`修改状态,A线程修改了一半,B对修改了一半的`脏数据`进行读写。
...全文
2837 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,725

社区成员

发帖
与我相关
我的任务
社区描述
Rust是新一代大规模底层系统平台开发的强力选项,拥有现代的类型系统,精确的生命周期控制,流畅的表达力和错误处理,以及明晰的异步编程范式。
rust 个人社区
社区管理员
  • 幻灰龙
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
社区主要目的: 1. 讨论Rust的核心语法语义 2. 讨论Rust的编程范式、最佳实践。 3. 讨论10x创新技术

试试用AI创作助手写篇文章吧