PIMP模式的理解
看了【C++程序设计技巧】Pimpl机制 之后,想了半天才理解
// MyClass.h 2: class MyClassImpl; // forward declaration 3: class MyClass { 4: public: 5: MyClass(); 6: ~MyClass(); 7: int Action1(); 8: private: 9: MyClassImpl *m_pImpl; 10: };
1: // MyClass.cpp 2: class MyClassImpl { 3: public: 4: int foo() { 5: return bar(); 6: } 7: int bar() { return var++; } 8: int var; 9: }; 10: 11: MyClass::MyClass() : m_pImpl(new MyClassImpl){} 12: 13: MyClass::~MyClass() 14: { 15: try { 16: delete m_pImpl; 17: } 18: catch (...) {} 19: } 20: 21: int MyClass::foo(){ return m_pImpl->foo(); }
这个模式下 MyClass 应该全部是公有接口 因为私有接口都放到 MyClassImpl 里面去实现了
上面的代码 的意思 MyClass 的接口是不能变的
每个类似 foo这样的函数 都是通过 调用m_pImpl->foo() 来实现的 而因为MyClassImpl 是前置声明 所以不会产生依赖
所以 不管你在MyClassImpl 里面怎么修改 只要保持 m_pImpl::foo() 之类的函数 还在
那foo()的内容就可以随便更改 加一个变量返回 然后返回那个变量时可以 加一个函数 然后返回那个函数 也是可以的
这些修改有个前提就是 MyClass的公有接口不会变 这就是 得到稳定接口的意思