Брутально и бессердечно о программировании и проектировании
ГлавнаяФорумАртПаттерныАнтипаттерныТест-драйвВопрос-ответКнигорецензииСправочная

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

Не завершайте процесс и потоки с помощью соответствующих функций, включая функции стандартной библиотеки (например, функция exit). Пусть завершение происходит естественным образом, то есть выходом из соответствующей функции потока или функции main.
Дело в том, что компиляторы имеют полное право не уничтожать (не вызывать деструкторы) локальные объекты, живущие в том же пространстве, в котором вызывается функция завершения процесса или потока. Это нарушает работу идиомы владения. Например очередь сообщений может ожидать в деструкторе корректной отработки оставшихся сообщений. Если идиома владения будет нарушена, то вы потеряете не только ресурсы, но вполне возможно что и важные данные.
В качестве примера:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>

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

int main()
{
    test t;
    exit(1);
    return 0;
}
 
Также будьте предельно осторожны во время совместного использования идиомы владения и функций а-ля fork().

Оглавление
Статистика
© 2007—2009 Inside C++ Коммерческие услугиКонтактная информация

производство мебели из дерева, производство мебельных фасадов, мебель на заказ. курсы английского языка помощь в покупке