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的公有接口不会变   这就是 得到稳定接口的意思

你可能感兴趣的:(imp)