【发布时间】:2011-09-19 14:57:58
【问题描述】:
我在 Google C++ 编码标准中读到 Google 不使用异常。如果不使用异常,当程序中发生错误时如何释放内存?
例如 f() 调用 g(),如果 g() 有错误,我应该释放 g() 中分配的所有内存,然后调用 f() 的异常。一旦 f() 捕获到异常,f() 将释放 f() 中分配的所有内存,并退出程序。
如果不使用异常,并且g()中有错误,我可以强制退出exit(0),c++程序是否足够聪明,可以释放所有分配的内存?我的猜测是,既然c++维护了一个栈和堆,一旦程序退出,c++会自动释放栈和堆?
【问题讨论】:
-
通常是操作系统回收内存。
-
好吧,如果整个进程崩溃了,那么是的,内存被操作系统释放了。无论程序是用什么语言编写的。
-
如果你禁止异常,声称某事是 C++ 可能有点欺诈。这就像为您的司机提供一辆汽车,但前提是他不使用燃料。
-
@Kerrek:可以说如果你禁止
export使用模板,那么声称某些东西是 C++03 是欺诈性的。这实际上只是您的代码库是否使用该功能的问题。不同之处在于 Google 不使用异常,大多数人都使用,而没有人(加上或减去一个小的错误术语)使用export。甚至 Google 也没有声称他们的这一决定是一个好的,但这是一种一贯的风格。它让你从 A 到 B,只是不舒服。 -
@Steve:也许吧,但绝对不止是 style。异常处理是支撑大多数标准库(想想分配器)和类设计基础(具有异常引发的自动清理的单一职责)的基本习惯用法。
export是后视镜上的毛茸茸的立方体,我可以容忍它的不在... :-)