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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Rahman, 9 Jan 2017.

  1. Rahman

    Rahman New Member

    Joined:
    24 Sep 2016
    Messages:
    20
    Likes Received:
    3
    Reputations:
    0
    Не завершайте процесс и потоки с помощью соответствующих функций, включая функции стандартной библиотеки (например, функция exit). Пусть завершение происходит естественным образом, то есть выходом из соответствующей функции потока или функции main.

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

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

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

    © codeby.net
     
  2. Hydra13

    Hydra13 New Member

    Joined:
    22 Mar 2017
    Messages:
    6
    Likes Received:
    3
    Reputations:
    0
    Может дескриптор просто не успел отработать, т.к. процесс завершился по exit(1). Если оставить только ретурн, то все будет хорошо.
     
Loading...
Similar Threads - выходить программы
  1. Peja
    Replies:
    0
    Views:
    2,475