在qt中,有一項隱含共享技術(也叫回寫複製,copy on write),它結合了淺拷貝和深拷貝的特點,具有以下優點:
(1)、可以降低對記憶體和cpu資源的使用,提高程式的執行效率;
(2)、方便程式設計師做某些物件的賦值操作,而不必拷貝深拷貝和淺拷貝的問題;
隱含共享的工作原理,簡單說就是:
當兩個物件共享同乙份資料時(通過淺拷貝實現資料塊的共享),如果資料不改變,不進行資料的複製。而當某個物件需要改變資料時則執行深拷貝。
舉例:qstring str1 = 「dog」;
qstring str2 = str1;
這時,str1和str2兩個物件指向內容中的同一塊內部資料結構。
然後,修改str2:
str2[0] = "l";
這時,在修改str2之前,qt會做一次深拷貝,從而str1和str2指向不同的記憶體,然後再修改str2。
這時str2的值就是「log」,而str1還是「dog」。
如果這時:
str1 = str2。
那麼,str1和str2將再次指向同一片記憶體,其值為「log」,而「dog」指向的記憶體將被釋放。
qt的具體實現機制是通過在資料結構中儲存乙個引用計數的變數來實現的,有興趣的同學可以進一步查閱資料了解。
在qt中,支援隱含共享的類有很多,比如:qdir、qbytearray、qbrush、qbitmap
QT中的除錯技術
下面提供一些有用的提示來幫助你除錯基於qt開發的應用程式。安裝配置qt時,要確保包含除錯選項。在一些平台上,在除錯模式下編譯qt將導致應用程式比預想的要大。在編譯qt的時候,預設要編譯框架。在結果中,可以找到發行版和除錯版 如qtcore和qtcore debug 如果通過 no framework...
C 記憶體變數分配 隱含的技術
和實驗室的大牛討論了c 語言,對於struct的定義用法有許多,感覺蠻不錯的。c 的速度快,而且結合了c語言的優點,同時又有物件導向的程式設計思想。c 在處理網路標頭檔案是十分快速而且準確定位,用起來十分的方便,直接可以操作bit。下面介紹以下union和struct的混用 這種方式,就可以混合使用...
JSP中的隱含物件
什麼是jsp中隱含物件 容器自動建立,在jsp檔案中可以直接使用的物件。作用 jsp預先建立的這些物件可以簡化對http的請求,響應資訊的訪問。jsp中的隱含物件 輸入輸出物件 request response out servlet物件 page config 異常物件 exception 隱含物...