class SomeClass {
public:
void Render() const;
private:
mutable Cache m_some_cache;
};
Run Code Online (Sandbox Code Playgroud)
上面的类是否正确?我何时可以安全地说"此操作不会更改实例的内部状态"?
在上面的例子中,SomeClass是在屏幕上呈现内容的东西.它使用缓存(例如OpenGL缓冲区对象)来允许更快地处理进一步的调用.所以内部改变的唯一事情就是缓存对象.我问自己缓存是否已经属于渲染器的内部状态.
这个例子非常小,但是在我的实际应用程序中,这是一个有很多类的道路,即涉及很多Render()调用,而且大多数只进行缓存.但是有些人还通过资源加载器加载资源 - 这里的假设是正确的,即使查询资源管理器加载资源,方法也可能是const吗?
当我们说"内部状态没有改变"时,我们的意思是纯粹逻辑的东西.更改对象状态是否是一个逻辑决定m_some_cache
.正确性是一个逻辑问题.因此,如果您认为从用户的角度来看,更改m_some_cache
不会影响对象状态(在逻辑意义上),那么代码就是const-correct.
在您的特定情况下,我相信它没关系.
归档时间: |
|
查看次数: |
493 次 |
最近记录: |