Деструктор не вызывается, как ожидалось

0

Я пишу серверное приложение. После RIIA в конструкторе одного из моих классов я создаю файл, а в деструкторе я его удаляю. Этот класс завернут в unique_ptr. Это серверное приложение, я могу только убить его, отправив ему сигнал (SIGINT).

Странная часть заключается в том, что я поместил std :: cerr-инструкции в деструкторы класса, хранящиеся в unique_ptr, и они не вызываются, когда приложение закрывается/умирает.

Ожидается ли это, когда ctrl + c нажата или мне не хватает чего-то очевидного в отношении деструкторов?

  • 1
    RIIA -> RAII (Приобретение ресурсов - это инициализация)
  • 1
    код пожалуйста
Показать ещё 3 комментария
Теги:
c++11

1 ответ

1
Лучший ответ

Обработка сигналов и исключения C++ - это разные функции. Сигналы (главным образом функция * nix) захватываются обработчиками сигналов; Я считаю, что, хотя в определенном смысле "изменение области" изменяется, оно изменяется извне C++ времени выполнения и, таким образом, не вызывает обычную разворачивание стека (это похоже на перемещение во втором измерении относительно стека, так что говорить). Гуглинг указал мне на этот пост, который я нашел интересным: https://gcc.gnu.org/ml/gcc-help/2011-08/msg00253.html.

  • 0
    Отправка сигнала действительно вызывает исключение. Думаю, мне нужно поймать сигнал и убраться, когда это произойдет.
  • 0
    Да, вам нужно изящно выйти из демона, а не просто прервать его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню