隱式共享又稱回寫複製(copy on write)。
當兩個物件共享同乙份資料時,如果資料不改變,則進行淺拷貝。當某個物件改變資料時,則進行深拷貝。
深拷貝和淺拷貝是程式在處理共享物件時的兩種複製方式。深拷貝是生成乙個物件的完整複製品,而淺拷貝只進行引用複製,如複製指向共享資料的指標。由於深拷貝複製乙個完整的物件,比淺拷貝占用更多的記憶體和cpu。
隱式共享將深拷貝和淺拷貝有機結合,可以降低對cpu和記憶體的占用,使函式中使用值傳遞更有效率,提高程式執行效率。
qt中支援隱式共享的類包括:
qstring、qbytearray、qbrush、qpen、qpalette、qbitmap、qimage、qpixmap、qcursor、qdir、qfont、qvariant等,以及所有的容器類。
致敬:陸文周《qt5 開發及例項(第二版)》
Qt 資料的隱式共享
在qt中有很多隱式共享類 implicitly shared classes 什麼是隱式共享呢,請參考官方文件的說明。好吧,翻譯一下 許多c 類隱式地共享資料,使得資源使用最大化,以及物件拷貝最小化。隱式共享類在傳參時既安全又高效,因為只傳了乙個指向資料的指標,並且只有給它寫入時資料才會被拷貝。看了...
Qt 注意隱式共享機制
最佳實踐 隱式共享對stl樣式的迭代器有另乙個影響 當迭代器在該容器上處於活動狀態時,應避免複製容器。迭代器指向內部結構 不要在使用了隱式資料共享的容器上,在有非 const stl 風格的遍歷器正在遍歷時複製容器 qvectorm vec vec m vec 0 100 qdebug vec ve...
Qt學習 深拷貝 淺拷貝 隱式共享
綜述 當兩個物件要共享乙份資料時,如果資料不改變,不進行資料的複製,通過淺拷貝就可以資料的共享 而當物件需要改變資料時,則做深貝。程式在處理共享物件時,會使用淺拷貝和深拷貝這兩種方法複製物件。1 深拷貝 即就是生成物件的乙個完整的複製品 2 淺拷貝 只是乙個引用複製 比如僅僅複製指向共享資料的指標 ...