参数在继承函数中消失

时间:2012-06-21 20:12:36

标签: c++ parameters

我有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;
}

1 个答案:

答案 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
}