2011-05-23 15 views
9

Normalmente, cuando elimino un objeto, lo configuro en cero. Esto ayuda a codificar mis rutinas para verificar que el objeto no sea cero y proceder.¿Cómo puedo hacer que QObject :: deleteLater() ponga a cero el objeto?

Sin embargo, si uso la función deleteLater(), he perdido el control de la misma. No sé si es un artículo válido o si necesito crear uno nuevo. La solución que encontré fue solo para hacer un seguimiento del estado por separado, pero ¿hay una mejor manera?

Respuesta

16

No hay nada de malo si llama a deleteLater() en su objeto y luego establece su puntero a NULL. QT framework eliminará el objeto de forma segura para usted.

Como alternativa, también puede conectarse a la señal destruida para recibir una notificación de la destrucción de su objeto y establecer su puntero a NULL en esa ranura.

9

Puede usar QPointer si el objeto que se está eliminando es un QObject. Esto lo establecerá en NULL.

3

¿Quiere decir "cero el puntero"? En C++ es más importante que en Java hacer la distinción entre el objeto y un puntero a él. Aquí, es especialmente importante, porque si pone a cero el objeto, su destructor no funcionará. Si pone en cero un puntero al objeto, no hay problema, porque Qt habrá agregado otro puntero a la lista de "objetos por eliminar".

Cuestiones relacionadas