Некоторые программы долго закрываются. Почему бы не сделать им быстрый выход (в обход деструкторам)? А операционная система позаботится сама об освобождении динамической памяти и закрытии файлов, хендлов, и прочее. Однако некоторые необходимые действия при выходе из программы бывают нужны, такие как: сохранение настроек, записи инфы в лог, и т.д.
// 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(); который очищает вектор, вызывая деструкторы только нужных объектов и чао!