程序使用动态内存处于以下三种原因之一:

使用原因使用案例
程序不知道自己需要使用多少对象容器类是出于第一种原因而使用动态内存的典型例子
程序不知道所需对象的准确类型面向对象程序设计是出于第二种原因而使用动态内存的例子
程序需要在多个对象间共享数据让多个对象能共享相同的底层数据

使用 new 和 delete 管理动态内存存在三个常见问题

  • 忘记 delete 内存。忘记释放动态内存会导致”内存泄漏“问题,因为这种内存永远不可能被归还给自由空间了。查找内存泄漏错误是非常困难的,因为通常应用程序运行很长时间后,真正耗尽内存时,才能检测到这种错误。
  • 使用已经释放掉的对象。通过在释放内存后将指针置为空,有时可以检测出这种错误。
  • 同一块内存释放两次。当有两个指针指向相同的动态分配对象时,可能发生这种错误。如果对其中一个指针进行了 delete 操作,对象的内存就被归还给自由空间了。如果我们随后又 delete 第二个指针,自由空间就可能被破坏。

坚持只使用智能指针,就可以避免所有这些问题。对于一块内存,只有在没有任何智能指针指向它的情况下,智能指针才会自动释放它。

Last modification:April 10, 2020
如果觉得我的文章对你有用,请随意赞赏