簡體   English   中英

析構函數未如預期那樣被調用

[英]Destructor not being called as expected

我正在編寫服務器應用程序。 在RIIA之后,在我的一個類的構造函數中創建一個文件,並在析構函數中刪除它。 此類包裝在unique_ptr中。 這是一個服務器應用程序,我只能通過發送信號(SIGINT)來殺死它。

奇怪的是,我已經將std :: cerr語句放置在unique_ptr持有的類的析構函數上,並且在應用程序關閉/死掉時不會調用它們。

按ctrl + c時會發生這種情況嗎?或者我是否缺少與析構函數有關的明顯內容?

信號處理和C ++異常是不同的功能。 信號(主要是* nix功能)被信號處理程序捕獲; 我相信,盡管從某種意義上說,“范圍”確實發生了變化,但是它是在C ++運行時之外更改的,因此不會觸發通常的堆棧展開(這可以說是相對於堆棧向第二維方向移動) 。 Googling向我指出了這篇帖子,我發現它很有趣: https : //gcc.gnu.org/ml/gcc-help/2011-08/msg00253.html

暫無
暫無

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

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