Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как вручную заставить сработать деструктор класса, объект которого был создан в main?

Илья Леонитов Ученик (3), закрыт 7 лет назад
class A
{
public:
//объявляем конструкторы
A(); //конструктор №1

//объявляем деструктор
~A();
};

//описание конструктора №1
A::A()
{
//инициализация элементов класса, выделение памяти, др.
cout<<"Здесь сработал контсруктор №1\n";
}

//описание деструктора
A::~A()
{
//освобождение выделенной памяти, др.
cout<<"Здесь сработал деструктор \n";
}

Хочу чтобы в консоли отобразилась работа деструктора, т. е. чтобы он вывел cout который у него в теле. Проблема в том, что деструктор сработает именно при завршении программы. Консоль закроется, и то что выведет деструктор я уже не увижу. А как заставить его сработать до завtршении программы (ф-ии main)?
Лучший ответ
Андрей Высший разум (466405) 7 лет назад
Создавай объект оператором new и удаляй оператором delete. Деструктор сработает в момент удаления.
Илья ЛеонитовУченик (3) 7 лет назад
через new это как?
A a1 = A(); Я так создаю. А как предлагаете вы?
A a1 = new A();
Остальные ответы
user51942 Оракул (50730) 7 лет назад
> Консоль закроется, и то что выведет деструктор я уже не увижу.

я думал, к началу изучения ООП люди уже знают, как приостанавливать закрытие консоли, чтобы успеть прочитать вывод

по сути: можно пользоваться операторами new и delete
Илья ЛеонитовУченик (3) 7 лет назад
знаем как приостанавливать. И это ничего не дает. Выхода из main то не было. А значит объекты еще живы. Такие вот дела
user51942 Оракул (50730) я не про это запускать экзешник из cmd или настроить в ide приостановку после завершения программы, не?
Николай Веселуха Высший разум (370948) 7 лет назад
#include <iostream>
using namespace std;
class A {
public:
A() {
ptr = new int;
cout << "Call constructor\n";
}
~A() {
cout << "Call destructor\n";
if (ptr != nullptr) {
delete ptr;
ptr = nullptr;
cout << "Resources released\n";
}
system("pause");
}
private:
int* ptr;
};
int main() {
A a;
a.~A(); // сначала принудительный вызов деструктора
// нажать любую клавишу
return 0; // затем автоматический вызов деструктора
}
Похожие вопросы