2010-07-16 11 views
9

¿Cuánto dura la vida de Qt Objects?Vida útil de objetos Qt

Tales como:

QTcpSocket *socket=new QTcpSocket(); 

Cuando será destruido socket? ¿Debo usar

¿Hay alguna diferencia con:

QTcpSocket socket; 

no pude encontrar profunda infromation sobre esto, es bienvenida cualquier comentario o enlazar.

Respuesta

11

Qt usa relaciones entre padres e hijos para administrar la memoria. Si proporciona el objeto QTcpSocket con un elemento primario cuando lo crea, el padre se encargará de limpiarlo. El padre puede ser, por ejemplo, la ventana GUI que usa el socket. Una vez que la ventana muere (es decir, se cierra), el socket muere.

Puede hacerlo sin el padre, pero de hecho tiene que delete el objeto manualmente.

Personalmente, recomiendo apegarse a la Qt idiomática y usar la vinculación de todos los objetos en árboles padre-hijo.

9

Los objetos asignados con new deben liberarse con delete.

Sin embargo, con Qt, la mayoría de los objetos pueden tener un padre, que se especifica como un argumento para el constructor. Cuando se elimina el elemento primario, los objetos secundarios se eliminan automáticamente.

+0

Cuando intento eliminar, obtengo un error de tiempo de ejecución (sobre la prueba para acceder a un miembro privado en QHostAddress) – metdos

+0

el acceso de miembro privado no se comprueba en el tiempo de ejecución, solo durante la compilación. Tal vez es un choque? Entonces su objeto probablemente se borre dos veces. –

2

Si no desea pasar a un padre por alguna razón (porque no hay QObject donde tiene sentido ser propietario del objeto de socket), también puede usar un QSharedPointer para administrar la vida útil.

Cuestiones relacionadas