码迷,mamicode.com
首页 > 其他好文 > 详细

pImpl

时间:2015-06-30 20:18:23      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

之前看代码,一直对pIml这个用法一知半解,参考这里

的一篇文章后有所收获。

总结一下,pIml的好处如下:

第一,引入更多的头文件降低编译速度。而且这个声明当然写在一个头文件里,而头文件,是不能预编译或增量编译的,

如果你因此而引入一个诸如<windows.h>之类的头文件,产生的代价可能是一杯咖啡的编译时间--而且每次编译都这样;

 

第 二,大大提高的模块的耦合度。在这里,CFooInternalData从此与 CFoo紧紧绑定。在一个库里的模块互相耦合当然可以忍受,

不过你要记得,这里有两种耦合度:一个是编译期的,一个是运行期的,这种方式下,无论编译还是 运行,它 们都耦合在一起,

只要 CFooInternalData 发生变更,CFoo 的模块也必须重新编译;

 

第三,降低了接口的稳定程 度。接口的稳定,至少有两个方面:一个是对于库的运用,即方法调用不能变;一个是对于库的编译,

即动态库的变更最好能让客户程序不用重编译。方法调用与这 个问题无关,但对于库的编译,如果CFooInternalData 变了,

客户程序显然必须重新编译,因为 private 部分,虽然对于客户程序不可用,但并不是不可见,尤其是对编译器来说。

对于一个动态链接库,这个问题可能会让人无法忍受。

 

pimpl 手法能比较完善的解决这些问题。

利用 pimpl 手法,我们把数据细节隐藏到一个实现类里:CFoo_pimpl,而 CFoo 的 private 部分只剩下一个指针,那就是传说中滴 pimpl 指针

pImpl

标签:

原文地址:http://www.cnblogs.com/riversHahaha/p/4611427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!