EStackOverflow已经被弃用了多长时间,有什么替代品?

10
我注意到在Delphi 2009中,SysUtils.pas中定义的EStackOverflow被标记为不赞成使用。我检查了一下,它在2007年也被标记为不赞成使用。我有一个Delphi 7安装光盘在这里,但我想问问是否有人知道它何时被弃用。
此外,有人知道为什么会被弃用,以及有什么替代品吗?我编写了一个通过递归引起堆栈溢出的测试应用程序,我仍然会得到一个EStackOverflow异常,但如果我专门为其添加处理程序,则会得到以下警告:
[DCC Warning] Unit57.pas(85): W1000 Symbol 'EStackOverflow' is deprecated
我知道EStackOverflow是从EExternal派生的,我可以捕获EExternal并检查ExceptionCode以获取STATUS_STACK_OVERFLOW,但这似乎是不必要的,因为它仍然抛出EStackOverflow异常。
这只是为了阻止我在自己的代码中抛出EStackOverflow吗?
(是的,我意识到在名为StackOverflow的网站上询问关于EStackOverflow的问题的讽刺意味,而且我是非常认真的。)

1
我试图在谷歌上搜索堆栈溢出的问题,结果得到了大量指向stackoverflow.com的链接... :-) 但我最终找到了这个。 - Lars D
5个回答

4

我这里没有D5,但我模糊记得deprecated指令只出现在D6上。

至于StackOverflow异常,我认为它已经被弃用了,因为只有Delphi运行时环境才会引发它。

编辑:根据所有答案的综合,当引入“Deprecated”关键字时,EStackOverflow在Delphi 6中被弃用。


4
就像在.NET中一样,你实际上无法捕获栈溢出异常,那么你要恢复什么呢?如果你需要捕获这种异常,很可能是你的代码有问题 :)

2
我实际上想要一行代码,写着“on EStackOverflow do raise;”,这样我就不会捕获它了。但你可能是对的。相反,我决定捕获EExternal并检查ExceptionCode是否为STATUS_STACK_OVERFLOW。 - Jim McKeeth

2

我刚刚检查了我的Delphi 6,发现EStackOverflow已经被弃用。我这里没有旧版本的Delphi。

关于为什么弃用和可能的替代方案,我无法提供帮助。


2
在Delphi 5中,它尚未被弃用。
编辑:实际上,在Delphi 5中,“deprecated”不是保留字。

1
这是为了防止我在自己的代码中抛出EStackOverflow而进行的吗?
更重要的是,我认为这意味着您不应该设计依赖于将来版本中抛出该异常的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接