Как выходить из программы (совет)

Тема в разделе "Общие вопросы по С и С++", создана пользователем rrrFer, 29 сен 2016.

  1. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Не завершайте процесс и потоки с помощью соответствующих функций, включая функции стандартной библиотеки (например, функция exit). Пусть завершение происходит естественным образом, то есть выходом из соответствующей функции потока или функции main.

    Дело в том, что компиляторы имеют полное право не уничтожать (не вызывать деструкторы) локальные объекты, живущие в том же пространстве, в котором вызывается функция завершения процесса или потока. Это нарушает работу идиомы владения. Например очередь сообщений может ожидать в деструкторе корректной отработки оставшихся сообщений. Если идиома владения будет нарушена, то вы потеряете не только ресурсы, но вполне возможно что и важные данные.

    В качестве примера:
    Код (C):
    #include <iostream>

    struct test
    {
        ~test()
        {
            std::cout << "~test()" << std::endl;
        }
    };

    int main()
    {
        test t;
        exit(1);
        return 0;
    }
    В этой программе деструктор не будет вызван, хотя объект создавался на стеке.

    Также будьте предельно осторожны во время совместного использования идиомы владения и функций а-ля fork().
     
Загрузка...

Поделиться этой страницей