《Effective Mocern C++》item 22: Pimpl Idiom

 

PIMPL(Private Implementation 或 Pointer to Implementation)是通過一個私有的成員指針,將指針所指向的類的內部實現數據進行隱藏。

PIMPL基於這樣一個事實:在C++類中,允許定義一個成員指針,指向一個已聲明過的類型。在頭文件中只是存放該類型的聲明,而具體的定義是存放在CPP文件中,這樣就可以隱藏類型的具體實現。

 


該chapter與講解unique_ptr的chapter息息相關: https://blog.csdn.net/qq_35865125/article/details/103752348

 

---------------comment: 對於incomplete type,可以用來聲明指針或者引用,不能使用其進行實例化。

---用std::unique_ptr來代替裸指針:

--上面這樣使用std::unique_ptr可能會出現的編譯錯誤: 上面的代碼沒有爲Widget類實現析構函數,因此編譯器會自動

生成一個默認的析構函數,析構函數會調用widget類的各個成員變量的析構函數,當調用成員std::unique_ptr<Impl>的

析構函數時報錯了,該成員的析構函數就是unique_ptr類的析構函數,其會對其包裹的指針進行delete, 下文中提到,在delete

之前c++會對將要被delete的指針進行檢查,看其是否是不完整類型,於是乎,就是在這一步出錯了。我認爲可能是編譯器自動

生成的析構函數在頭文件裏面,看不到Impl結構的定義,所以報錯,下下文提到的解決辦法也是用戶去自己在cpp中顯示地定義析構函數::

解決編譯錯誤:

ongoing------

 

 


Ref:

https://blog.csdn.net/wo17fang/article/details/25280577

https://www.cnblogs.com/cthon/p/9196258.html

https://blog.csdn.net/lxgwm2008/article/details/13511783

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章