博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
句柄类
阅读量:2246 次
发布时间:2019-05-09

本文共 863 字,大约阅读时间需要 2 分钟。

句柄类


C++中的访问控制允许将实现部分与接口部分分开,但实现部分的隐藏是不完全的。编译器仍然必须知道一个类的所有部分的声明,以便于正确创建和管理它。可以想象一种只需要声明类的公共接口部分的编程语言,它将私有实现部分完全隐藏。但C++为了尽可能多的编译期间静态类型检查和高效,声明中包含了私有实现部分(比如private成员)。这导致:客户程序员虽然不能访问私有部分,但可以看到它;造成一些不必要的重复编译。

隐藏实现

有些项目不可让最终客户程序员看到实现部分。例如可能在一个库的头文件中显示一些策略信息,但不想让竞争对手获得,我们不想在头文件中暴露任何线索。或许,我们把库放到了一个有敌意的环境中,那里的程序员会不顾一切的使用指针和类型转换来访问私有成员。在这些情况下,有必要把一个编译好的实际结构放在实现文件中,而不是头文件。

减少重复编译

当一个类声明被修改时,无论修改的是私有部分还是公共接口,包含此声明的所有文件都需要重新编译。理想情况下只要接口没变,就不需编译。

句柄类(handle class)

有关实现部分的内容都消失了,只剩下一个指针smile。该指针指向一个结构,这个结构的定义与类的实现部分一同放在实现文件中。

比如:头文件中只包含公共的接口和smile指针,该指针指向一个不完全定义的类。

//Handle.h#ifndef __HANDLE_H__#define __HANDLE_H__class Handle{
struct Cheshire; Cheshire *smile;public: Handle(); ~Handle();};#endif//Handle.cpp#include "Handle.h"struct Handle::Cheshire{ int i;};Handle::Handle(){ smile = new Cheshire; ;}Handle::~Handle(){ delete smile; ;}

转载地址:http://feqbb.baihongyu.com/

你可能感兴趣的文章
springboot+jta+atomikos多数据源和 springboot+mybatisplus+aop实现数据库读写分离而引发的一些思考
查看>>
java面试中常考的一些面试sql语句
查看>>
一个字节等于多少位?
查看>>
帧框架frameset的用法总结
查看>>
java1.8中创建hashmap的初始化大小设置标准
查看>>
mark一下,service的实现层没有加@service注解。
查看>>
jq对象转换成js对象。已经jq的复合选择器。
查看>>
(一)alin‘s mysql学习笔记----概述
查看>>
(二)alin’s mysql学习笔记----mysql的存储引擎
查看>>
(三)alin’s mysql学习笔记----常用的join连接查询
查看>>
(四)alin’s mysql学习笔记----索引简介
查看>>
分布式系统中的幂等性的理解
查看>>
spring的注解开发中的常用注解(一)------@bean @Configuration @ComponentScan @Import @Scope @Lazy
查看>>
(五)alin’s mysql学习笔记----索引性能分析
查看>>
Spring中使用@Transactional注解进行事务管理的时候只有应用到 public 方法才有效
查看>>
springboot整合rabbitmq及rabbitmq的简单入门
查看>>
mysql事务和隔离级别笔记
查看>>
事务的传播属性(有坑点)自调用失效学习笔记
查看>>
REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
查看>>
动态代理实现AOP
查看>>