QT設計重要特點:QT隱式共享(Implicit Sharing)

隱式共享是QT設計的一個重要特點。

QT隱式共享的原文是這樣的(來源於https://doc.qt.io/archives/qt-4.8/implicit-sharing.html):

“Many C++ classes in Qt use implicit data sharing to maximize resource usage and minimize copying. Implicitly shared classes are both safe and efficient when passed as arguments, because only a pointer to the data is passed around, and the data is copied only if and when a function writes to it, i.e., copy-on-write.”

“When dealing with shared objects, there are two ways of copying an object. We usually speak about deep and shallow copies. A deep copy implies duplicating an object. A shallow copy is a reference copy, i.e. just a pointer to a shared data block. Making a deep copy can be expensive in terms of memory and CPU. Making a shallow copy is very fast, because it only involves setting a pointer and incrementing the reference count."

"Object assignment (with operator=()) for implicitly shared objects is implemented using shallow copies.”

“When implementing your own implicitly shared classes, use the QSharedData and QSharedDataPointer classes.”

總結幾句話就是:

1)QT裏對很多C++類採用了隱式共享的方法;隱式共享保證了高效共享數據;

2)隱式共享實質就是淺拷貝;QT認爲深拷貝過於耗費內存和CPU;

3)如果用隱式共享,用QSharedData and QSharedDataPointer 這兩種類。

由上可以得知,所謂隱式共享,不過是淺拷貝;同時,保證了淺拷貝有引用計數,避免刪除。

QSharedData和QSharedDataPointer是可以用於隱式共享的QT方法。

目前,QT裏默認隱式共享的方法是:

OpenGL

QGLColormap class is used for installing custom colormaps into a QGLWidget

QBitArray

Array of bits

QBitmap

Monochrome (1-bit depth) pixmaps

QBrush

Defines the fill pattern of shapes drawn by QPainter

QByteArray

Array of bytes

QCache

Template class that provides a cache

QContiguousCache

Template class that provides a contiguous cache

QCursor

Mouse cursor with an arbitrary shape

QDir

Access to directory structures and their contents

QFileInfo

System-independent file information

QFont

Specifies a font used for drawing text

QFontInfo

General information about fonts

QFontMetrics

Font metrics information

QFontMetricsF

Font metrics information

QGradient

Used in combination with QBrush to specify gradient fills

QHash

Template class that provides a hash-table-based dictionary

QIcon

Scalable icons in different modes and states

QImage

Hardware-independent image representation that allows direct access to the pixel data, and can be used as a paint device

QKeySequence

Encapsulates a key sequence as used by shortcuts

QLinkedList

Template class that provides linked lists

QList

Template class that provides lists

QLocale

Converts between numbers and their string representations in various languages

QMap

Template class that provides a skip-list-based dictionary

QMultiHash

Convenience QHash subclass that provides multi-valued hashes

QMultiMap

Convenience QMap subclass that provides multi-valued maps

QPainterPath

Container for painting operations, enabling graphical shapes to be constructed and reused

QPalette

Contains color groups for each widget state

QPen

Defines how a QPainter should draw lines and outlines of shapes

QPicture

Paint device that records and replays QPainter commands

QPixmap

Off-screen image representation that can be used as a paint device

QPolygon

Vector of points using integer precision

QPolygonF

Vector of points using floating point precision

QQueue

Generic container that provides a queue

QRegExp

Pattern matching using regular expressions

QRegion

Specifies a clip region for a painter

QSet

Template class that provides a hash-table-based set

QSqlField

Manipulates the fields in SQL database tables and views

QSqlQuery

Means of executing and manipulating SQL statements

QSqlRecord

Encapsulates a database record

QStack

Template class that provides a stack

QString

Unicode character string

QStringList

List of strings

QTextBoundaryFinder

Way of finding Unicode text boundaries in a string

QTextCursor

Offers an API to access and modify QTextDocuments

QTextDocumentFragment

Represents a piece of formatted text from a QTextDocument

QTextFormat

Formatting information for a QTextDocument

QUrl

Convenient interface for working with URLs

QVariant

Acts like a union for the most common Qt data types

QVector

Template class that provides a dynamic array

QX11Info

Information about the X display configuration

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