另一个 Blog 地址:http://insaneguy.me
原文链接:http://insaneguy.me/2015/04/05/cheshire_cat_in_cpp-pimpl_idiom/
C++ 中的“柴郡猫技术”(Cheshire Cat Idiom),又称为 PIMPL(Pointer to IMPLementation) ,Opaque Pointer 等,是一种在类中只定义接口,而将私有数据成员封装在另一个实现类中的惯用法。该方法主要是为了隐藏类的数据以及减轻编译时的压力。
“柴郡猫”是什么鬼?就是下面这货:
柴郡猫(Cheshire cat)是英国作家刘易斯·卡罗尔(Lewis Carroll,1832-1898)创作的童话《爱丽丝漫游奇境记(Alice’s Adventure in Wonderland)》中的虚构角色,形象是一只咧着嘴笑的猫,拥有能凭空出现或消失的能力,甚至在它消失以后,它的笑容还挂在半空中。
– 来自百度百科
柴郡猫的能力和 PIMPL 的功能相一致,即虽然数据成员“消失”了(被隐藏了),但是我们的“柴郡猫”的笑容还是可以发挥威力。
下面通过例子来介绍一下 PIMPL 。
1 数据隐藏
C++ 中我们在头文件中定义类,比如一个简单的 Student 类由如下方式定义:
// student.h
class Student
{
public:
Student(); // Constructor