


Как вручную заставить сработать деструктор класса, объект которого был создан в main?
class A
{
public:
//объявляем конструкторы
A(); //конструктор №1
//объявляем деструктор
~A();
};
//описание конструктора №1
A::A()
{
//инициализация элементов класса, выделение памяти, др.
cout<<"Здесь сработал контсруктор №1\n";
}
//описание деструктора
A::~A()
{
//освобождение выделенной памяти, др.
cout<<"Здесь сработал деструктор \n";
}
Хочу чтобы в консоли отобразилась работа деструктора, т. е. чтобы он вывел cout который у него в теле. Проблема в том, что деструктор сработает именно при завршении программы. Консоль закроется, и то что выведет деструктор я уже не увижу. А как заставить его сработать до завtршении программы (ф-ии main)?
Создавай объект оператором new и удаляй оператором delete. Деструктор сработает в момент удаления.
#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; // затем автоматический вызов деструктора
}
> Консоль закроется, и то что выведет деструктор я уже не увижу.
я думал, к началу изучения ООП люди уже знают, как приостанавливать закрытие консоли, чтобы успеть прочитать вывод
по сути: можно пользоваться операторами new и delete