Update item19.md

This commit is contained in:
猫耳堀川雷鼓 2021-02-20 22:40:17 +08:00 committed by GitHub
parent d4e423f363
commit 61e3f7d942
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,7 +1,7 @@
## 条款十九:对于共享资源使用`std::shared_ptr`
**Item 19: Use `std::shared_ptr` for shared-ownership resource management**
使用带垃圾回收的语言的程序员指着C++程序员笑看他们如何防止资源泄露。“真是原始啊”他们嘲笑着说“你们没有从1960年的Lisp那里得到启发吗机器应该自己管理资源的生命周期而不应该依赖人类。”C++程序员翻白眼:“你得到的启发就是只有内存算资源,而且资源释放都是非确定性的吗我们更喜欢通用可预料的销毁谢谢你。”但我们的虚张声势可能底气不足。因为垃圾回收真的很方便而且手动管理生命周期真的就像是使用石头小刀和兽皮制作RAM电路。为什么我们不能同时有两个完美的世界一个自动工作的世界像是垃圾回收一个销毁可预测的世界像是析构
使用带垃圾回收的语言的程序员指着C++程序员笑看他们如何防止资源泄露。“真是原始啊”他们嘲笑着说“你们没有从1960年的Lisp那里得到启发吗机器应该自己管理资源的生命周期而不应该依赖人类。”C++程序员翻白眼:“你们得到的所谓启示就是只有内存算资源,而且资源回收的时间点是不确定的我们更喜欢通用可预料的销毁谢谢你。”但我们的虚张声势可能底气不足。因为垃圾回收真的很方便而且手动管理生命周期真的就像是使用石头小刀和兽皮制作RAM电路。为什么我们不能同时有两个完美的世界一个自动工作的世界像是垃圾回收一个销毁可预测的世界像是析构
C++11中的`std::shared_ptr`将两者组合了起来。一个通过`std::shared_ptr`访问的对象其生命周期由指向它的有共享所有权(*shared ownership*)的指针们来管理。没有特定的`std::shared_ptr`拥有该对象。相反,所有指向它的`std::shared_ptr`都能相互合作确保在它不再使用的那个点进行析构。当最后一个指向某对象的`std::shared_ptr`不再指向那(比如因为`std::shared_ptr`被销毁或者指向另一个不同的对象),`std::shared_ptr`会销毁它所指向的对象。就垃圾回收来说,客户端不需要关心指向对象的生命周期,而对象的析构是确定性的。