Ускоренное завершение программы
От: Sm0ke Россия ksi
Дата: 10.10.21 09:48
Оценка:
Некоторые программы долго закрываются. Почему бы не сделать им быстрый выход (в обход деструкторам)? А операционная система позаботится сама об освобождении динамической памяти и закрытии файлов, хендлов, и прочее. Однако некоторые необходимые действия при выходе из программы бывают нужны, такие как: сохранение настроек, записи инфы в лог, и т.д.

// done_fast.h
#include <cstdlib>
#include <vector>
#include <memory>

struct done_base {
    virtual ~done_base() = default;
};

struct done_fast {
    // types
    using t_items = std::vector< std::unique_ptr<done_base> >;
    // data
    t_items items_;
    // actions
    void done(bool is_good = true) {
        items_.clear(); // только нужные деструкторы
        std::_Exit(is_good ? EXIT_SUCCESS : EXIT_FAILURE); // выход в обход прочих деструкторов
    }
    // static
    static done_fast & instance() {
        static done_fast inst;
        return inst;
    }
protected:
    done_fast() = default;
};


Теперь обработчики выхода наследуем от класса done_base, помещаем действия в деструкторе и добавляем в список через: done_fast::instance().items_.emplace_back(). А для выхода из программы вызываем: done_fast::instance().done(); который очищает вектор, вызывая деструкторы только нужных объектов и чао!
cpp
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.