2011-11-04 77 views

回答

2

您不僅需要這些功能,還需要捕獲異常,還需要拋出並傳播它們的函數。實際調用_set_se_translator本身可能不需要用/ Eha編譯,但爲什麼不一致?

+0

據我已經使用讀捕獲/ EHA涉及安全問題,這不是好的做法。並且可能會導致性能較差的圖像,因爲即使編譯器沒有看到投擲,編譯器也不會主動優化try塊。 – cprogrammer

+0

安全問題?不要這樣想。沒有什麼好的表現,是的。你大量增加了可能導致C++異常拋出的指令數量。 – MSalters

+0

你知道它效率低嗎?也許我應該使用SEH並自己轉換異常。 – cprogrammer

2

檢查後,我必須不同意之前所說的關於需要用/ EHa編譯的所有實例。我做了一個小程序,以:

  • 崩潰代碼

    __declspec(dllexport) void crashMe() { *((int*)0)=0; } 
    

在DLL中沒有任何異常在一個try/catch處理所有

  • 調用代碼的其他地方編譯

然後

  • 除非調用代碼與/ EHA編譯的程序會崩潰
  • 沒有_set_se_translator例外只能在catch(...)
+0

感謝您的調查! OP可能處於相同的情況:將Boost.Test與已編譯的庫一起使用,並且我可以僅爲測試文件對象啓用/ EHa –