我有1个父类(“Area”)和一些子类(“circle”,“polygon”等)。 其中一个虚拟继承函数以一种非常奇怪的方式运行 - 它的输入参数在运行时消失(在调试模式下看到)。它使一些记忆奇怪的错误.. 你知道吗?(让我们假设Segment类运行良好)
class Point {
int x, y;
public:
Point(){};
Point(int xP, int yP):x(xP), y(yP){}
};
class Area {
public:
virtual ~Area() {
}
virtual bool contains(const Point& p1) const=0;
};
class Circle: public Area {
double radius;
Point center;
public:
~Circle() {}
Circle(double radiusP, Point centerP) :
radius(radiusP), center(centerP) {}
bool contains(const Point& p1) const;
};
和函数的定义(包含):
bool Circle::contains(const Point& p1) const {
return Segment(center, p1).getLength() < radius;
}
答案 0 :(得分:1)
P1是参考。如果p1被删除,或者在包含运行时超出范围的临时值,则会出现内存错误。
@lezebulon临时超出范围的一个例子:
Point& getPoint()
{
Point p;
return p;
}
void doStuff()
{
Point& p = getPoint(); // p is already bad... but will probably still work.
area->contains( p ); // oops stack overwritten, p obliterated
}