首先,我想说清楚这个问题与Scott Meyers'预订Effective C ++(第3版),特别是第22项:声明数据成员私有
我确实理解它并试图将一些内容应用到我的代码中以开始练习它。但是,我有一个案例,我不知道如何解决它。基本上我有一些抽象的接口和一些继承看起来像这样。
class abstractSystem {
...
protected:
AbstractThing *_thing;
}
class DerivedSystem : public AbstractSystem {
// inherits _thing so we can use it here.
}
然而,这与第22项不一致。我认为最好有一个接口到派生类的基类,这在许多情况下都有点好用,但在这种情况下,因为多态用于决定_thing
我们会在getter中复制它,以便在派生系统中,只要我们需要访问它,我们就需要复制它。
所以我猜这不是很好,并且与项目28保持一致:避免返回"句柄"对象内部我似乎无法在不复制_thing
的情况下弄清楚如何做到这一点:
class AbstractSystem {
protected:
AbstractThing thing() { return *_thing; }
private:
AbstractThing *_thing;
}
class DerivedSystem {
// now we need to use thing() to access _thing implying copy
}
这是必须要做的,而且复制性能有点难(如果经常做的话)?
我想这可能是我的设计错了。
答案 0 :(得分:1)
您可以返回对'thing'的引用:
protected:
AbstractThing const& thing() { return *_thing; }
这样可以避免复制整个对象。