c++中pimpl用法总结

来源:互联网 发布:ubuntu软件卸载命令 编辑:程序博客网 时间:2024/05/11 18:51

在编写稳定代码是,管理好代码间的依赖性是不可缺少的一个环节。特别是库文件的编写中,减少代码间的依赖性可以提供一个“干净”的接口。

下面是根据美国Herb Sutter写的Exceptional C++一文,并进行了一定的总结。

一、降低#include的依赖性,

    1)永远不用用#include包含不必要的头文件;

    2)如果需要流的前置声明,应该优先使用#include <iosfwd>;

    3)只需要前置声明时,绝不需要用#include包含相应的头文件;

二、限制类的内部成员之间的依赖性,

    1)对于那些广泛使用的类,应该优先使用pimpl惯用法来隐藏实现细节,通过一个不透明的指针(指向一个进行了前置声明,但没有定义的类)来保存私有成员。这个声明可以采用

        “struct XImpl;//前置声明,放在类中,也可以放在类的外面

            XImpl* pimpl_;"//定义一个指针变量

        这样的形式。

三、可靠类设计原则,

    1)如果使用聚合关系就已经足够,就不要使用继承

四、编译防火墙,

   1) 应该将那些部分放入XImpl对象中?

        方法一:将所有的私有数据成员(但不包括私有成员函数)放入到XImpl中。

        方法二:将所有的私有成员函数放入到XImpl中。

                注意:a、不能将虚函数放在pimpl中隐藏起来,即使虚函数是私有的;

                           b、pimpl中的函数可能需要一个指向可见对象的”回调指针“;

                           c、最好将只有私有成员才调用的非私有函数放入到XImpl中;

        方法三:保护成员不得放入到XImpl中。

        方法四:将XImpl写成与可见对象完全一样的形式,而将可见对象写成由简单的转调函数组成的公有接口。(只有在受限情况下才有用,对于继承没有多大用处)

    2)如何才能以最安全的方式来使用它呢?

        有时候需要,但会多一个中间层调用


0 0
原创粉丝点击