当应返回const值或const引用时,如何设计方法?

时间:2018-06-21 15:07:19

标签: c++ c++11 reference override

我有这样的课程:

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。只是想知道是否还有另一种方法。

1 个答案:

答案 0 :(得分:1)

考虑使您要返回的局部变量静态:

class Renter : public Base
{
    const Room &getRoom() const override
    {
        static const Room myLocalRoom;
        return myLocalRoom;
    }
};

但是,正如一些评论所指出的那样,您可能还需要重新考虑设计。