Top.Mail.Ru
Ответы
Аватар пользователя
8лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

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

class A
{
public:
//объявляем конструкторы
A(); //конструктор №1

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

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

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

Хочу чтобы в консоли отобразилась работа деструктора, т. е. чтобы он вывел cout который у него в теле. Проблема в том, что деструктор сработает именно при завршении программы. Консоль закроется, и то что выведет деструктор я уже не увижу. А как заставить его сработать до завtршении программы (ф-ии main)?

По дате
По рейтингу
Аватар пользователя
Новичок
8лет

Создавай объект оператором new и удаляй оператором delete. Деструктор сработает в момент удаления.

Аватар пользователя
Высший разум
8лет

#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; // затем автоматический вызов деструктора
}

Аватар пользователя
Оракул
8лет

> Консоль закроется, и то что выведет деструктор я уже не увижу.

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

по сути: можно пользоваться операторами new и delete