句柄类 (Thinking in c++__1)

需求:

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

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


方案:

句柄类可解决上述问题:

//:HANDLE.H -- Handle Classes
#ifndef HANDLE_H_
#define HANDLE_H_

class handle {
  
struct cheshire; // Class declaration only
  cheshire* smile;
public:
  handle( );
  void doit( );
     ~handle( ); 
}
;
#endif // HANDLE_H_
    这是所有客户程序员都能看到的,其中struct cheshire是没有完全指定的类型说明或类说明,将用来存放真正的变量。它告诉编译器, cheshire是一个结构的名字,但没有提供有关该结构的任何东西。这对产生一个指向结构的指针来说意见足够了。

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

//:HANDLE.CPP -- Handle implementation
#include "handle.h"

//Define handle's implementation
struct handle:cheshire {
  
int i;
}
;

handle::handle() {
  smile=(cheshire*)malloc(sizeof(cheshire));
  smile->i=0;
}


void handle::doit() {
  
//do something with i
}


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

posted on 2012-10-14 19:03  至柔  阅读(154)  评论(0)    收藏  举报

导航