我已经有一段时间没有接触 C++ 了,但是当我重新开始写代码时,我想确保自己能够遵循最佳实践,包括保持 const 正确。
我目前正在构建一个游戏框架的代码库,以下是我整理的几个类(出于简化的考虑):
class Screen
{
public:
Clear();
}
并且
class Game
{
private:
Screen* screen;
protected:
const Screen* GetScreen() const;
}
我为了简洁起见省略了其余内容,但要说的是,
Game
类负责创建Screen
类的实例。一旦创建完成,应仅通过GetScreen()
方法访问。这样做的想法是,当创建新游戏时,我会从这个基类继承,因此,在循环渲染期间,例如我希望清除屏幕以重新绘制下一帧。在上述定义中,
Clear()
方法不允许在使用GetScreen()
方法时调用,因为它不是常量。清除方法实际上会更改类的内部工作方式(因为先前显示的图像被清除),因此我将定义中的const
声明留空。如果我将其设置为const
,那么我就必须将Screen
类的某些内部工作部分设置为mutable
,但根据我的阅读,这并不是非常恰当。所以,我有两个问题。我是否应将
void Clear()
更改为void Clear() const
并使内部工作部分可变?还是说有另一种选择可以让
Game
类的成员screen
只能由Game
类设置一次,以便我可以在程序的其余运行时间访问非常量成员函数?感谢任何帮助。
screen
成为Screen&
或者Screen* const
,而不是const Screen*
。 - Casey