![]() |
Как выходить из программы | ||
Не завершайте процесс и потоки с помощью соответствующих функций, включая функции стандартной библиотеки (например, функция 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(). |
|
Статистика |
|