Я изучал, что Destructor
вызывается всякий раз, когда объект выходит из области видимости или когда выделенная ему память освобождается с помощью оператора delete
.
#include <iostream>
using namespace std;
class point
{
private:
int x_coord;
int y_coord;
public:
point()
{
x_coord = 0;
y_coord = 0;
}
point(int x, int y)
{
x_coord = (x > 79 ? 79 : (x < 0 ? 0 : x));
y_coord = (y > 79 ? 79 : (y < 0 ? 0 : y));
}
~point()
{
cout << "Destructor invoked\n";
}
int getx(void)
{
return x_coord;
}
int gety(void)
{
return y_coord;
}
};
int main()
{
point p1;
point p2(20, 80);
point *p3 = new point;
cout << "p1.x = " << p1.getx() << ": p1.y = " << p1.gety()<< "\n";
cout << "p2.x = " << p2.getx() << ": p2.y = " << p2.gety()<< "\n";
cout << "p3->x = " << p3->getx() << ": p3->y = " << p3->gety()<< "\n";
point * p4 = &p1;
delete p4;
delete p3;
return 0;
}
- память, выделенная для p1, выделяется с помощью
delete p4
.Таким образом, деструктор вызывается delete p3
вызывает следующий деструктор. - p2 выходит из области видимости, и вызывается следующий деструктор.
Я ожидал, что деструктор будетвызывается только 3 раза.Но я вижу, что деструктор вызывается 4 раза.Что является причиной этого?Есть ли какая-то ошибка в моем понимании деструкторов