Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2020, 17:52   #1
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию Отловить завершение работы программы

Если ли в C++ аналог Паскалевского finalization? Т.е. когда программа завершает свою работу и все модули выгружаются из памяти, выполнить некоторое действие?

Приведу абстрактный пример:
Есть у меня некоторый класс, у которого все члены статические. Мне нужно по завершении работы программы вызвать метод save(). Т.к. класс статический, то о деструкторе не может идти речи. А вручную вызывать save() в конце можно банально забыть.
Код:
#include <iostream>
using namespace std;

class StaticClass
{
private:
	static int x;
public:
	static void setX(int ax);
	static int getX();
	static void save();
};

void StaticClass::setX(int ax)
{x = ax;}

int StaticClass::getX()
{return x;}

void StaticClass::save()
{ /* ... */ }


int StaticClass::x = 0;

int main() {
	StaticClass::setX(505);
	cout << StaticClass::getX();
	// StaticClass::save();
	return 0;
}
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 27.04.2020, 18:32   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от CraZZZy-GameRRR Посмотреть сообщение
класс статический
Есть разумные причины сделать именно на статике? Или просто лишний раз погрызть кактус?
Black Fregat вне форума Ответить с цитированием
Старый 27.04.2020, 18:40   #3
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Есть разумные причины сделать именно на статике?
Да, именно статика нужно. Почему, долго объяснять придётся.
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 27.04.2020, 18:46   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Гугл подсказывает об std::atexit. Но теперь вместо ручного вызова save будет ручная регистрация функции.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 27.04.2020, 22:57   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Напишите деструктор.
waleri вне форума Ответить с цитированием
Старый 27.04.2020, 23:48   #6
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Напишите деструктор.
Читайте внимательно первое сообщение - класс статический.
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 28.04.2020, 09:03   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от CraZZZy-GameRRR Посмотреть сообщение
Читайте внимательно первое сообщение - класс статический.
А вы все равно напишите деструктор - заодно узнаете что-то новое для себя...
waleri вне форума Ответить с цитированием
Старый 28.04.2020, 10:55   #8
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Цитата:
Сообщение от CraZZZy-GameRRR Посмотреть сообщение
класс статический
не бывает никаких статических классов, бывает статическая переменная, статическое поле класса или статическая функция.

Тебе нужно убрать статику внутри класса и объявить глобальную переменную

Код:
#include <vector>

class StaticClass
{
private:
    int x{0};
    int* arr{new int[10]};
    std::vector<int> vec{10,0};
    
public:
    void setX(int ax)
    {
        x = ax;
    }
    
    int getX()
    {
        return x;
    }
    
    void save()
    {
    }
    
    StaticClass()
    {
    }
    
    ~StaticClass()
    {
        save();
        delete [] arr;
    }
};

StaticClass m_StaticClass;

int main()
{
}

Последний раз редактировалось Алексей1153; 28.04.2020 в 11:05.
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Завершение работы сторонней программы AnryKZKZ Общие вопросы Delphi 16 16.05.2014 10:03
завершение работы программы oranger Помощь студентам 2 25.06.2012 22:51
Завершение работы программы нажатием ESC whatever Помощь студентам 0 30.04.2012 00:07
Завершение работы программы без формы FaTaL Общие вопросы Delphi 5 21.06.2011 09:55
Завершение работы чужой программы Viteef Win Api 12 24.09.2007 12:31