示例代码:
local foo = require "foo"
以下客户端代码现在可能会更改我的对象的内部数据,即使我直观地预计它不会:
class Foo
{
void m();
}
class Bar
{
void m() const
{
fooPtr->m(); // allowed
// foo.m(); // disallowed at compile-time as I wish
}
private:
Foo* fooPtr;
Foo foo;
}
可以通过引入这样的访问器方法来改进:
int main()
{
const Bar bar;
bar.m();
}
但是,直接从Bar中访问foo仍然有效且没有编译器错误,因此开发人员可能仍然会这样做并绕过对象的常量。另一个问题是,如果我必须在整个班级中改变foo的访问权限,我将产生大的差异。这个问题有更好的解决方案吗?