未按预期调用析构函数

Destructor not being called as expected

我正在编写服务器应用程序。在 RIIA 之后,在我的 classes 之一的构造函数中,我创建了一个文件,并在析构函数中删除了它。这个 class 包裹在一个 unique_ptr 中。这是一个服务器应用程序,我只能通过向它发送信号 (SIGINT) 来终止它。

奇怪的是,我在 unique_ptr 持有的 class 的析构函数上放置了 std::cerr 语句,当应用程序 closes/dies.

这是在按下 ctrl+c 时预期的结果,还是我遗漏了一些与析构函数相关的明显信息?

信号处理和 C++ 异常是截然不同的特征。信号(主要是 *nix 特性)由信号处理程序捕获;我相信虽然在某种意义上 "scope" 确实发生了变化,但它是从 C++ 运行 时间之外发生变化的,因此不会触发通常的堆栈展开(这就像相对于堆栈,可以这么说)。谷歌搜索让我找到了这个 post,我发现它很有趣:https://gcc.gnu.org/ml/gcc-help/2011-08/msg00253.html