2010-07-23 63 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沒有設計,例外。