簡體   English   中英

如何實現,bad-alloc中止而不是拋出異常

[英]How to achieve, that bad-alloc aborts instead of throwing an exception

在我們的應用程序中,我們將任何崩潰記錄到包含堆棧跟蹤的日志文件中。 我們可以使用這些報告來確定崩潰原因。

問題是,我們傾向於在幾個地方(實際上很多)捕獲std :: exception,這使得在拋出bad_alloc時報告實際上沒用,因為堆棧跟蹤丟失了。

如何更改行為,所以程序中止而不是拋出bad_alloc? 當我們在3個不同的操作系統中編寫時,使用3個不同的std實現,改變std本身是我們想要避免的。

除了重新思考或重新設計以捕捉更多量身定制的異常(我真的推薦),你有兩個解決方案:

  1. 使用operator newoperator new[]的“no-throw”變體。 檢查返回的空指針,然后中止。

  2. 設置一個調用std::terminate new處理程序

我檢查了異常層次結構( http://en.cppreference.com/w/cpp/error/exception ),似乎我們永遠不需要捕獲std :: runtime_exception之外的任何內容,並且所有內部異常類型都是從的std :: runtime_exception。

所以我只是改變了我們程序中最廣泛的捕獲是std :: runtime_error,因此std :: bad_alloc變為異常,我們可以正確管理。

編輯:這只能在C ++ 11之后使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM