關於Pimpl技術

一般情況下,在設計類時,初學者總是把私有成員變量和函數設成值類型,這樣做有三點不妥:

1、增加了編譯時間。若“私有成員變量”或“私有成員函數的參數”都是值定義的,那麼在編譯這個類時需要這些對象的完全定義。而如果這些類型的頭文件裏又包含了很多其他類(尤其對一個大的項目更是如此),那麼編譯時間將會相當長;

 

2、使名字查找和匹配產生多義性。在C++中,可視性(visibility)和可訪問性(accessibility)是不同的。這主要體現在名字匹配過程中。public、protected和private限制的是可訪問性,但不是可視性。事實上在C++中沒有什麼關鍵字是指定可視性的,這就是說在編譯時所有的代碼其實都可以“看見”類中的內容。下面這個例子會更清楚一些:

 

從上面這個例子可以看出,編譯器總是先進行名字匹配,此時是忽略可訪問性限制的。爲了解決這兩個問題,我們只能使用::Twice(21)和

c.Twice(string("Hello!"))。

 

3、安全性

此處涉及到很複雜的線程機制,不予詳細解釋。

 

更多資料請參照http://www.gamedev.net/reference/articles/article1794.asp

http://www.cppblog.com/SpringSnow/articles/80111.html兩篇博文。

 

                                                                                   ————引自Sutter C++ Coding Standards

發佈了28 篇原創文章 · 獲贊 13 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章