1. 程式人生 > >學習日記之享元模式和Effective C++

學習日記之享元模式和Effective C++

實例 存儲 通過 由於 類型 ati 擦除 -s 當前

享元模式(Flyweight):運用共享技術有效地支持大量細粒度的對象。

(1),享元模式能夠避免大量很相似的開銷。在程序設計中,有時須要生成大量細粒度的類實例來表示數據。假設能發現這些實例除了幾個參數外基本上都是同樣的。有時就能大幅度地降低須要實例化的類的數量。假設能把這些參數移到類的外面,在方法調用時將他們傳遞進來,就能夠通過共享大幅度降低實例的數目。

(2)。假設一個應用使用了大量的對象。而這些對象造成非常大的存儲開銷的時候就考慮使用。還有就是對象的大多數狀態能夠外部狀態,假設刪除對象的外部狀態,那麽能夠用相對較少的共享對象代替非常多組對象。


Effective C++:


1:請使用 traits classes 表現類型信息

(1)。Traints classes 使得“類型相關信息”在編譯器可用。他們以 templates 和 “templates 特化”完畢實現。

(2),整合重載技術(voerloading)後。traits classes 有可能在編譯器對類型運行 if...else 測試。

2:認識 template 元編程

(1),Template metaprogramming(TMP。模板元編程)可將工作由執行期移往編譯期,由於能夠實現早期錯誤偵測和更高的執行效率。

(2)。TMP 可被用來生成“基於政策選擇組合”(based on combinations of policy choices)的客戶定制代碼。也可用來避免生成對某些特殊類型並不適合的代碼。


今日工作問題:

對於QMainWindow窗口,在show 。resize 時候。系統會在重繪前將原來的背景使用系統默認背景色擦除,假設系統默認背景色和當前窗口背景色不同,那麽就會有閃爍現象。

探索1:使用setSysColor將系統背景色改為窗口背景色 結論:setSysColor會改變系統所以窗口背景色,失敗。

探索2:使用qt自帶雙緩沖,設置window attribute 為Qt::WA_OpaquePaintEvent或者 Qt::WA_NoSystemBackground 結論:對背景閃爍問題沒有作用


期望:1.希望能夠通過跟蹤源代碼,找到詳細系統繪制原理。解決閃爍問題。

2.通過改變某個窗口的背景色,禁用系統默認背景色繪制或者擦除操作解決閃爍問題。

學習日記之享元模式和Effective C++