C++内存常见问题

  • C++ 里可能出现的内存问题大致有这么几个方面:
  1. 缓冲区溢出(buffer overrun)。
  2. 空悬指针/野指针。
  3. 重复释放(double delete)。
  4. 内存泄漏(memory leak)。
  5. 不配对的 new[]/delete。
  6. 内存碎片(memory fragmentation)

正确使用智能指针能很轻易地解决前面 5 个问题:

  1. 缓冲区溢出:用 std::vector/std::string 或自己编写 Buffer class 来 管理缓冲区,自动记住用缓冲区的长度,并通过成员函数而不是裸指针来修改 缓冲区。
  2. 空悬指针/野指针:用 shared_ptr/weak_ptr,这正是本章的主题。
  3. 重复释放:用 scoped_ptr,只在对象析构的时候释放一次。
  4. 内存泄漏:用 scoped_ptr,对象析构的时候自动释放内存。
  5. 不配对的 new[]/delete:把 new[] 统统替换为 std::vector/scoped_array。

你可能感兴趣的:(C++内存常见问题)