2010-07-23 56 views
1

我有一些ANTLR 2的C++目标的经验,但一直犹豫要花很多时间在ANTLR 3上,因为我担心异常安全。ANTLR3 C目标与C++异常

不幸的是,ANTLR 3只有一个C目标,它产生C“C++兼容”。这确实似乎包括C++异常安全,基于以下几点:

你或许可以使用[例外]小心, 但正如你指出,你必须要小心 内存。运行时间 会跟踪其所有正常内存 分配,所以只要您关闭 '类'正确,您应该 一般确定。但是,你应该确保 抛出异常 不会绕过正常规则清除 ,例如重置错误和 回溯标志等。

ANTLR-interest, circa 2009

没有人有使用ANTLRÇ目标与(高级)C的经验++?是否有可能安全地抛出异常?为了安全起见,我需要编写哪些额外的代码(如果有的话)?

+0

它告诉你,如果你使用异常,你需要编写代码。完全不告诉你*你需要写什么代码。哦,别忘了关闭你的课程:) – 2010-07-23 23:13:14

+0

我最近发布了一个C++的ANTLR目标。检查它是否有用。 http://www.antlr.org/wiki/pages/viewpage.action?pageId=29130826 – Gokul 2012-02-16 13:03:34

回答

0

我没有ANTLR的经验(可悲......),但是没有办法让C代码在异常情况下工作。我推荐你使用更有效的C++,第9项:“使用析构函数来防止资源泄漏”

这个想法是,如果在清理过程中抛出异常,你就没有关于什么是已经删除()不是的,你的软件泄漏内存。如果你使用auto_ptr/scroped_ptr,你不必担心这个,因为编译器会自己处理它。

但是,这个习惯用法是C++ - only,C没有设计,例外。