回复: 请教各位大大关于动态内存管理的问题…… 突然想起来,C++里,程序员可以在函数接口上描述可能抛出的异常,也可以完全不描述。
如果一个函数明确的用throw()表示自己不会抛出异常,那么当以后要维护这个函数时,就能明白以前的使用很可能是基于“它不会抛出异常”这个假设的,那么现在的修改就要维持这一约束。可是如果不把这个信息用throw()描述出来,那么虽然一开始编译的时候编译器能够分析出来这个函数不会抛出异常,但是编译器不可能知道,这到底只是一个偶然的事实结果,还是程序员刻意的设计。前者意味着以后的修改可以使它抛出异常,而如果是后者,那么意味着以后的修改是不能让它抛出异常的。自动化分析只能知道这个函数现在是否会抛出异常,但是不知道它以后是否也应该维持这种状态。这时如果程序员不加以描述,那么以后维护时就可能会引入bug。
总体的意思就是说,有些东西,编译器只能分析出当前的状态,但是分析不出,在人脑的设计之中程序应该是怎样的;自动分析程序无法区分一个结果是偶然的结果,还是应该一直维持的约束。如果不加以描述,一段时间之后,人也难以分析清楚。
所以在程序中,给予程序员以丰富的表达手段,把设计信息在代码中表达出来,这比过度依赖自动化分析更好。
虽然不是针对栈的,但是大致能表达我的意思了。汗。 |