我研究過每當對象超出範圍或者使用delete
運算符取消分配的內存時,都會調用Destructor
。C++中的析構函數調用
#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次析構函數。這是什麼原因?關於我對破壞者的理解,是否存在一些錯誤
我不認爲'刪除p4'是正確的。 – cnicutar
你不應該'''''p1'因爲它被分配到堆棧上。 – ObscureRobot
如果您刪除了調用這些方法的'main()'中的析構函數,字段和代碼的所有方法,則可以大大縮短您的示例。他們與你的問題無關。 – ObscureRobot