- C++ 里可能出现的内存问题大致有这么几个方面:
- 缓冲区溢出(buffer overrun)。
- 空悬指针/野指针。
- 重复释放(double delete)。
- 内存泄漏(memory leak)。
- 不配对的 new[]/delete。
- 内存碎片(memory fragmentation)
正确使用智能指针能很轻易地解决前面 5 个问题:
- 缓冲区溢出:用 std::vector<char>/std::string 或自己编写 Buffer class 来 管理缓冲区,自动记住用缓冲区的长度,并通过成员函数而不是裸指针来修改 缓冲区。
- 空悬指针/野指针:用 shared_ptr/weak_ptr,这正是本章的主题。
- 重复释放:用 scoped_ptr,只在对象析构的时候释放一次。
- 内存泄漏:用 scoped_ptr,对象析构的时候自动释放内存。
- 不配对的 new[]/delete:把 new[] 统统替换为 std::vector/scoped_array。
网友评论