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

      Комментарии к записи Как выходить из программы отключены

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 2 мес., 3 нед. назад.

  • Автор
    Сообщения
  • #3638

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

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

    В качестве примера:

    #include <iostream>
    
    struct test
    {
        ~test()
        {
            std::cout << "~test()" << std::endl;
        }
    };
    
    int main()
    {
        test t;
        exit(1);
        return 0;
    }

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

Для ответа в этой теме необходимо авторизоваться.