我有 thou 对象:
Polygon p1, p2;
我有一个Polygon
被调用的继承类Triangle
,我尝试这样做:
p1 = Triangle(temp1, temp2, temp3); // temp 1,2,3 are lengths of sides
但是由于某种原因,Triangle
在构造结束时调用了析构函数。
Rectangle::~Rectangle(void)
{
Polygon::~Polygon();
}
Polygon::~Polygon(void)
{
if (sides != NULL)
{
delete [] sides;
sides = NULL;
}
}
然后它Polygon
第二次运行析构函数。
所以在代码结束后,这就是调试器所说的p1
(n
是边数):
p1 {n=3 sides=0x0062c070 {-17891602} } Polygon
问题:
- 为什么它调用析构函数?
- 为什么同时调用
Triangle
andPolygon
的析构函数? - 如何解决这个问题?
编辑:根据要求:
/*returns true if for the polygons A and B:
(a) for each side on polygon A there is an equal side on polygon B
(b) the number of sides in polygons A and B are equal
(c) sum of sides of A equals the sum of sides of B */
bool Polygon::operator==(const Polygon& p) const
{
if (n != p.n)
return false;
if(circumference() != p.circumference())
return false;
for (int i=0; i < n; i++)
if (!doesSideHasEqual(sides[i], p, n))
return false;
return true;
}
另外,感谢您解释它为什么运行~Polygon
,将考虑在内。