C++ 里可能出现的内存问题大致有这么几个方面:
1. 缓冲区溢出
2. 空悬指针/野指针
3. 重复释放
4. 内存泄漏
5. 不配对的new[]/delete
1. 缓冲区溢出
2. 空悬指针/野指针
3. 重复释放
4. 内存泄漏
5. 不配对的new[]/delete
6. 内存碎片
正确使用智能指针能很轻易地解决前面5 个问题,解决第6 个问题需要别的思路,
我会另文探讨。
1. 缓冲区溢出⇒ 用vector/string 或自己编写Buffer 类来管理缓冲区,自动记住
用缓冲区的长度,并通过成员函数而不是裸指针来修改缓冲区。
2. 空悬指针/野指针⇒ 用shared_ptr/weak_ptr,这正是本文的主题
3. 重复释放⇒ 用scoped_ptr,只在对象析构的时候释放一次
4. 内存泄漏⇒ 用scoped_ptr,对象析构的时候自动释放内存
5. 不配对的new[]/delete ⇒ 把new[] 统统替换为vector/scoped_array
除了编程书,操作系统教材也是必读的,
至少要完整地学习一本经典教材的相关章节,可从《操作系统设计与实现》、《现代操作系统》、
《操作系统概念》任选一本,了解各种同步原语、临界区、竞态条件、死锁、典型的IPC 问
题等等,防止闭门造车