析构函数未按预期调用

时间:2015-02-25 20:53:13

标签: c++ unix c++11

我正在编写服务器应用程序。在RIIA之后,在我的一个类的构造函数中,我创建了一个文件,在析构函数中我将其删除。该类包含在unique_ptr中。这是一个服务器应用程序,我只能通过发送信号(SIGINT)来杀死它。

奇怪的是,我已经在unique_ptr所持有的类的析构函数上放置了std :: cerr语句,并且当应用程序关闭/死亡时它们不被调用。

当按下ctrl + c或者我是否遗漏了与析构函数有关的明显内容时,这是预期的吗?

1 个答案:

答案 0 :(得分:1)

信号处理和C ++异常是不同的功能。信号处理程序捕获信号(主要是* nix功能);我相信,虽然从某种意义上来说肯定是"范围"更改,它从C ++运行时间外部更改,因此不会触发通常的堆栈展开(它就像在堆栈中移动第二维,可以这么说)。谷歌搜索给我发了一篇有趣的帖子:https://gcc.gnu.org/ml/gcc-help/2011-08/msg00253.html