C++编程规范之42:不要公开内部数据

简介:

摘要:

    不要过于自动自发:避免返回类所管理的内部数据的句柄,这样类的客户就不会不受控制地修改对象自己拥有的状态。

class Socket

{

public:

         //...打开handle_的构造函数,关闭handle_的析构函数,等等

         int GetHandle() const{ return handle_;}

private:

         int handle_;

};

    数据隐藏是一种强大的抽象方式,也是强大的模块化机制。但是隐藏数据却又暴露句柄的作法是一种自欺欺人,就像你锁上了自己家的家门,确把钥匙留在了锁里。原因如下:

    1.客户现在有两种方式实现其功能。可能使用你的类提供的抽象,也可以直接操作你的类所依赖的实现。在后一种情况下,对象并不知道自己所拥有的资源已经发生了显著变化。现在类无法可靠地增加或者改善功能了,因为客户可以避开这些改善的、受控的实现——以及任何它认为后加的不变式,这样本来正确的错误处理就几乎不可能起作用了。

    2.类不能改变其抽象的底层实现,因为客户将依赖于此。如果以后升级socket,用不同的低级操作原语支持不同的协议,则获取了底层handle_且布恩那个对其进行正确操作的调用代码就会不加警告地中断。

    3.类无法实施其不变式,因为调用代码能够在类不知情的情况下改变状态。

4.客户代码会存储类所返回的句柄,并且在类代码已经销毁句柄之后还试图使用它们。

相关文章
|
4天前
|
存储 前端开发 Java
【C++ 多线程 】C++并发编程:精细控制数据打印顺序的策略
【C++ 多线程 】C++并发编程:精细控制数据打印顺序的策略
50 1
|
4天前
|
自然语言处理 算法 Java
C/C++ 程序员编程规范之注释
C/C++ 程序员编程规范之注释
48 1
|
4天前
|
存储 安全 算法
【C/C++ 数据发送结构设计】C++中的高效数据发送:多态、类型擦除与更多解决方案
【C/C++ 数据发送结构设计】C++中的高效数据发送:多态、类型擦除与更多解决方案
80 0
|
4天前
|
存储 数据管理 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机本身的数据保存(CustomData)功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机本身的数据保存(CustomData)功能(C++)
50 0
|
4天前
|
存储 算法 测试技术
|
4天前
|
程序员 编译器 C++
|
4天前
|
C++
C++ 访问说明符详解:封装数据,控制访问,提升安全性
C++ 中的访问说明符(public, private, protected)用于控制类成员的可访问性,实现封装,增强数据安全性。public 成员在任何地方都可访问,private 只能在类内部访问,protected 则允许在类及其派生类中访问。封装提供数据安全性、代码维护性和可重用性,通过 setter/getter 方法控制对私有数据的访问。关注公众号 `Let us Coding` 获取更多内容。
27 1
|
4天前
|
安全 搜索推荐 Linux
Linux C++ 环境下数据高效备份策略:全面指南与最佳实践
Linux C++ 环境下数据高效备份策略:全面指南与最佳实践
37 1
|
4天前
|
存储 机器学习/深度学习 算法
【C/C++ 查找算法】深入探索数据查找算法:原理、数学模型与C/C++实现
【C/C++ 查找算法】深入探索数据查找算法:原理、数学模型与C/C++实现
56 0
|
4天前
|
存储 缓存 安全
【C/C++ 关键字 存储类说明符】C/C++ 的mutable 关键字 忽略对该数据成员的常量性检查在const函数中修改变量值
【C/C++ 关键字 存储类说明符】C/C++ 的mutable 关键字 忽略对该数据成员的常量性检查在const函数中修改变量值
30 0