句柄类 (Thinking in c++__1)

需求:
1)安全技术安全的需要。即使核心实现封闭在库中不可见,但是头文件中的变量定义仍然会曝露一些内部信息;

2)节省编译时间的需要。在开发设计初期,实现部分需要经常变动,连头文件中变量定义也需要经常变动,因此在重编译的时候头文件也需要编译,有时候导致编译时间过长。


方案:

句柄类可解决上述问题:


句柄类 (Thinking in c++__1)//:HANDLE.H -- Handle Classes

句柄类 (Thinking in c++__1)
#ifndef HANDLE_H_

句柄类 (Thinking in c++__1)
#defineHANDLE_H_

句柄类 (Thinking in c++__1)

句柄类 (Thinking in c++__1)
classhandle{

句柄类 (Thinking in c++__1)
structcheshire;//Class declaration only

句柄类 (Thinking in c++__1)
cheshire*smile;

句柄类 (Thinking in c++__1)
public:

句柄类 (Thinking in c++__1)
handle( );

句柄类 (Thinking in c++__1)
void doit( );

~handle( );

句柄类 (Thinking in c++__1)}
;

句柄类 (Thinking in c++__1)
#endif//HANDLE_H_这是所有客户程序员都能看到的,其中struct cheshire是没有完全指定的类型说明或类说明,将用来存放真正的变量。它告诉编译器, cheshire是一个结构的名字,但没有提供有关该结构的任何东西。这对产生一个指向结构的指针来说意见足够了。

在这种技术中,包含具体实现的结构主体被隐藏在实现文件中。


句柄类 (Thinking in c++__1)//:HANDLE.CPP -- Handle implementation

句柄类 (Thinking in c++__1)
#include"handle.h"

句柄类 (Thinking in c++__1)

句柄类 (Thinking in c++__1)
//Define handle's implementation

句柄类 (Thinking in c++__1)
structhandle:cheshire{

句柄类 (Thinking in c++__1)
inti;

句柄类 (Thinking in c++__1)
}
;

句柄类 (Thinking in c++__1)

句柄类 (Thinking in c++__1)
handle::handle(){

句柄类 (Thinking in c++__1)
smile=(cheshire*)malloc(sizeof(cheshire));

句柄类 (Thinking in c++__1)
smile->i=0;

句柄类 (Thinking in c++__1)
}


句柄类 (Thinking in c++__1)

句柄类 (Thinking in c++__1)
voidhandle::doit(){

句柄类 (Thinking in c++__1)
//do something with i

句柄类 (Thinking in c++__1)
}


句柄类 (Thinking in c++__1)

句柄类 (Thinking in c++__1)
handle::~handle(){

句柄类 (Thinking in c++__1)
free(smile);

句柄类 (Thinking in c++__1)
}


句柄类的使用就像任何类的使用一样,包括头文件,创建对象,发送信息。但是通过这样的设计,即隐藏了变量的设计,也使得实现作变动时无需重编译头文件。Bruce说虽然这并不是完美的信息隐蔽,但毕竟是一大进步。

原文链接: https://www.cnblogs.com/makesunny/archive/2012/10/14/2723227.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/65739

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午11:59
下一篇 2023年2月9日 下午12:00

相关推荐