Gestión de memoria QT

gestión de memoria Qt : Qt puede mantener dentro de una jerarquía de objetos. Para los elementos visuales, esta jerarquía es la relación con el padre subconjunto de componentes; para los elementos no visuales, es una afiliación objeto a otro objeto. En Qt, Qt, el padre se borrarán los borrada lo largo de sus hijos.
C ++, borrar y nueva debe estar emparejado (uno a uno): eliminar menos, la pérdida de memoria, problemas mucho más grande. Cuando Qt rara vez se utiliza en la nueva eliminación, y porque la clase heredada QObject clase, establecer la matriz (función addChild setParent también puede ser utilizado en la construcción o el padre) por lo padre es borrado, el niño los padres están todos relacionados eliminar de forma automática, sin que el procesamiento manual de usuario.
Pero el padre no es el niño es nuevo para distinguirlo a cabo o asignados en la pila. Esto refleja la fuerte borrado, cualquier objeto puede ser liberado, y los objetos de la pila de eliminación puede llevar a errores de memoria, que necesitan saber Qt gestión de memoria semiautomático. Otro problema: los niños no saben si han sido eliminarlo fuera, puede parecer puntero salvaje. Tendrían que entender el puntero inteligente QPointer Qt.
En Qt, las clases más básicas y fundamentales son: QObject, QObject interna tiene una lista, va a salvar a los niños, así como un puntero para salvar al padre, cuando su propia destrucción, va a borrarse de la lista de los padres y destructores todos los niños .
Qt gestión semi-automática de memoria
(1) y su clase derivada objetos QObject, padre no-cero si lo es, entonces el destructor será su destructor objeto padre.
(2) Objeto QWidget sus clases derivadas pueden proporcionarse bandera Qt :: WA_DeleteOnClose (se cerrará cuando el destructor del objeto).
(3) la clase Object QAbstractAnimation derivada, puede ser proporcionado QAbstractAnimation :: DeleteWhenStopped.
(4) QRunnable :: setAutoDelete () , MediaSource :: setAutoDelete ().
(5) las relaciones entre padres e hijos: los padres, de objetos secundarios, relación padre-hijo. Esto es independiente de la herencia en Qt única de la clase, los parámetros de transmisión relacionados con el padre (clases de base, las clases derivadas, o una clase de matriz, subclase, que es, independiente de la matriz para el sistema se deriva).

QObject es la clase base para todos los objetos qt
puntero inteligente
. 1, QPointer
clase QPointer es una plantilla, QPointer puede monitorear el espacio objeto dinámico se asigna, y cuando la actualización de eliminar el objeto.
QPointer principio de realidad: En el QPointer guarda un puntero QObject y un puntero al puntero (puntero doble) para gestionar las variables globales, y QObject cuando se destruye (destructor, QWidget través de su propio destructor, en lugar de confiar en la QObject) llamará QObjectPrivate :: clearGuards funcionan a la GuardHash global que dos puntero a cero, porque el problema es de dos puntero, por lo QPointer puntero a cero el curso. Con el juicio isNull en ella está vacía.

2, std :: auto_ptr
elimina automáticamente el objeto al que apunta cuando auto_ptr se destruye.
Transferencia: https: //blog.csdn.net/u013711616/article/details/52688581

Publicado 29 artículos originales · ganado elogios 10 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_42542969/article/details/104900571
Recomendado
Clasificación