我有这样的课程:
class Base
{
virtual const Room &getRoom() const = 0;
};
class Owner : public Base
{
const Room &getRoom() const override
{
return myRoom;
}
Room myRoom;
};
class Renter : public Base
{
const Room &getRoom() const override
{
return Room(myCity); //this will not work
}
City myCity;
};
void main()
{
const auto& room = ownerOrRenter.getRoom();
}
这不起作用,因为我正在返回局部变量的引用。但是,如果我将Base :: getRoom()的返回类型更改为const Room,则每次调用getRoom()时,我都必须复制Owner :: myRoom。
我认为一种解决方案是将getRoom()更改为processRoom(void(* f)(Room)),这样就不需要返回Room。只是想知道是否还有另一种方法。
答案 0 :(得分:1)
考虑使您要返回的局部变量静态:
class Renter : public Base
{
const Room &getRoom() const override
{
static const Room myLocalRoom;
return myLocalRoom;
}
};
但是,正如一些评论所指出的那样,您可能还需要重新考虑设计。