1. 程式人生 > >C++的PImpl技巧及作用

C++的PImpl技巧及作用

PImpl(private implementation) 其主要作用是解開類的使用介面和實現的耦合。

一個很簡單的實現如下:
標頭檔案中:

 1 class CSample
 2 {
 3 private:
 4 class CImpl;
 5     shared_ptr<CImpl> mp;
 6  7 public:
 8     CSample();
 9 10 void print();
11 };


實現檔案中:

 1 class CSample::CImpl
 2 {
 3 public:
 4 void doPrint()
 5     {
 6         cout <<"impl print
"<< endl;
 7     }
 8 };
 9 10 CSample::CSample() : mp(new CImpl)
11 {}
12 13 void CSample::print() { mp->doPrint(); }


類CSample僅向外界暴露了最小的介面,真正的實現由其內部類CImpl來完成。這樣無論CImpl如何修改,外界對此一無所知,從而保持介面的不變性。這種方式的另外一個好處是減少了標頭檔案之間的依賴關係。

上面的程式碼裡,我使用了boost的shared_ptr來管理指標,簡化程式碼。

關於PImpl的更多資料和資訊可以參考如下連結:
1. PImp的原理
2.

PImpl your C++ code
3. the C++ PImpl