gpt4 book ai didi

c++ - 参数在继承函数中消失

转载 作者:行者123 更新时间:2023-11-28 08:02:07 25 4
gpt4 key购买 nike

我有 1 个父类(“区域”)和一些子类(“圆”、“多边形”等)。其中一个虚拟继承函数的行为非常奇怪——它的输入参数在运行时消失了(在 Debug模式下看到)。它使一些内存奇怪的错误..你有什么想法吗?(假设 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;
}

最佳答案

P1 是引用。如果 p1 被删除,或者是在 contains 运行时超出范围的临时文件,您将收到内存错误。

@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
}

关于c++ - 参数在继承函数中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11146002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com