不必要的公开

主要观点:在既有前沿 C++ 构造又有深度遗留设计决策的遗留代码库中,可巧妙利用两者。以一个有不必要公共数据成员的类为例,通过将数组移到私有部分并以指针形式重新引入公共名称,在不影响只读访问的情况下解决问题,但此方法在序列化、复制等方面存在不足,对于非数组数据成员需用不同方式处理,作者的遗留代码库最终因Hidden类示例效果不佳而采用依赖流程和代码审查的方式来保持代码的合理性。
关键信息:

  • 有一个Example类,其中needlesslyPublic是不必要的公共数据成员,有读写函数reset和只读函数consumer
  • 通过将数组移到私有部分并以指针形式重新引入公共名称,实现只读访问。
  • 引入Hidden类提供只读接口,但存在friend声明等问题。
  • 对于非数组数据成员需用不同方式处理。
    重要细节:
  • Example类中reset函数用于填充数组,consumer函数用于读取数组元素。
  • 以指针形式重新引入公共名称利用了数组指针衰减特性。
  • Hidden类的operator[]函数提供只读访问接口,friend声明允许Example类访问其私有数据。
阅读 14
0 条评论