请注意这里没有显式的内存管理代码。没有宏,没有类型转换,没有溢出检测,没有强制的大小限制,也没有指针。如果使用function object和标准算法[译注:指标准库中提供的泛型算法],我连Iterator也可以不用。不过这毕竟只是一个小程序,杀鸡焉用牛刀?
当然,这些方法也并非无懈可击,而且说起来容易做起来难,要系统地使用它们 也并不总是很简单。不过,无论如何,它们的广泛适用性令人惊讶,而且通过移去大量的显式内存分配/释放代码,它们确实增强了代码的可读性和可管理性。早在 1981年,我就指出通过大幅度减少需要显式加以管理的对象数量,使用C++“将事情做对”将不再是一件极其费神的艰巨任务。
如果你的应用领域没有能在内存管理方面助你一臂之力的类库,那么如果你还想让你的软件开发变得既快捷又能轻松得到正确结果,最好是先建立这样一个库。
如果你无法让内存分配和释放成为对象的“自然行为”,那么至少你可以通过使 用资源句柄来尽量避免内存泄漏。这里是一个示例:假设你需要从函数返回一个对象,这个对象是在自由内存堆上分配的;你可能会忘记释放那个对象——毕竟我们 无法通过检查指针来确定其指向的对象是否需要被释放,我们也无法得知谁应该负责释放它。那么,就用资源句柄吧。比如,标准库中的auto_ptr就可以帮 助澄清:“释放对象”责任究竟在谁。我们来看:
这里只是内存资源管理的例子;至于其它类型的资源管理,可以如法炮制。
如果在你的开发环境中无法系统地使用这种方法(比方说,你使用了第三方提供的古董代码,或者远古“穴居人”参与了你的项目开发),那么你在开发过程中可千万要记住使用内存防漏检测程序,或者干脆使用垃圾收集器(Garbage Collector)。
原文地址:http://www.research.att.com/~bs/bs_faq2.html#memory-leaks
本文探讨了C++中如何有效管理内存以避免内存泄漏的问题。介绍了利用C++类系统的构造和析构机制,以及标准库中的容器等工具进行内存管理的方法。此外还提到了资源句柄的使用,并建议在开发过程中使用内存泄漏检测工具。

被折叠的 条评论
为什么被折叠?



