在C++中,一个返回非const对象指针的const方法是否被视为不良实践?例如,考虑以下方法:
// Makes perfect sense
bool isActive() const { return m_isActive; }
// Makes perfect sense, both consts ensure nothing is modified
const SomeObject* someObject() const { return m_someObject; }
// Makes perfect sense, no const because SomeObject is mutable,
// thus MyClass is indirectly mutable
SomeObject* someObject() { return m_someObject; }
// Makes no sense, if you're just returning a pointer to a const object,
// then the method should clearly be const since nothing can be modified
const SomeObject* someObject() { return m_someObject; }
最后一个组合让我感到困惑:以下代码是否被认为是不良实践?
SomeObject* someObject() const { return m_someObject; }
因为方法返回的类不是const,但是方法本身是const,所以它有点毫无意义,因为你可以修改SomeObject
并因此间接修改你的类...那么这种形式是否被认为是不好的做法?例如,你应该只使用以下一种来代替它吗?
const SomeObject* someObject() const { return m_someObject; }
SomeObject* someObject() { return m_someObject; }
实际情况:我正在编写一个智能手机游戏,其中包含一个名为Game
的类。Game
类包含几个方法,这些方法返回指向实用程序类(例如InputManager
、AudioManager
等)的指针。
class Game
{
public:
InputManager* inputManager() const { return m_inputManager; }
...
private:
InputManager* m_inputManager;
...
}
让inputManager()
成为const,这样做有任何意义吗?因为它返回的对象不是const,也不应该是const(因为InputManager需要可变以便更新其状态等等)。
还是应该删除方法中的const
修饰符,以更准确地反映方法的行为?这样,如果我有一个const Game
,我就不能调用inputManager()
,并混淆Game
的输入管理器,即使Game
是const
。