1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

  1. rrrFer

    rrrFer Гость

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

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

    В качестве примера:
    Код:
    #include <iostream>
    
    struct test
    {
        ~test()
        {
            std::cout << "~test()" << std::endl;
        }
    };
    
    int main()
    {
        test t;
        exit(1);
        return 0;
    }
    В этой программе деструктор не будет вызван, хотя объект создавался на стеке.

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

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