En este tema, Qt brilla con luz propia, ya que cuando se programa con Qt no es necesario destruir los punteros a objetos que creemos, de ello se encarga Qt automáticamente. El mecanismo funciona así: todas las clases deben heredar de QObject. Con la interfaz no hay problema porque todos los widgets heredan de QWidget que a su vez hereda de QObject, y con nuestros objetos que no sean de la interfaz obtenemos más ventajas heredándolos de QObject, como poder usar señales y slots. A partir de ese momento, lo único que hay que hacer es pasarle el QObject padre en el constructor. Por ejemplo:
class MiClase : public QObject {
Q_OBJECT
public:
void MiClase(QObject *parent = 0);
};
MiClase::MiClase(QObject *parent)
: QObject(parent) {
// código propio del constructor
}
Y luego sólo tendríamos que crear el objeto, pero no es necesario destruirlo:
MiClase *obj = new MiClase(this);
El destructor de QObject se encargará automáticamente de destruir todos los objetos que sean sus hijos. De ese modo, no hay problemas con punteros que se queden por ahí perdidos. :)
Además, con la interfaz gráfica si un widget se añade a un layout o a otro widget, automáticamente se asigna el padre, con lo cual nisiquiera hace falta el this:
MiFormulario::MiFormulario(QWidget *parent)
: QWidget(parent) {
...
QPushButton *boton = new QPushButton;
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(boton);
...
setLayout(layout);
}
No estoy muy puesto en C++, pero se supone que si usas RAII y las 1.316.422 técnicas avanzadas que permite el C++, no deberías tener los mismos problemas de apuntadores en C++ que se tienen en C (¿no era que mejor no usar apuntadores en C++ si no es absolutamente necesario?).
Punteros en Qt
(Puntos:1, FueraDeTema)( Última bitácora: Jueves, 31 Enero de 2013, 09:47h )
Y luego sólo tendríamos que crear el objeto, pero no es necesario destruirlo:
El destructor de QObject se encargará automáticamente de destruir todos los objetos que sean sus hijos. De ese modo, no hay problemas con punteros que se queden por ahí perdidos. :)
Además, con la interfaz gráfica si un widget se añade a un layout o a otro widget, automáticamente se asigna el padre, con lo cual nisiquiera hace falta el this:
openSUSE [opensuse.org]
Re:Punteros en Qt
(Puntos:2)No estoy muy puesto en C++, pero se supone que si usas RAII y las 1.316.422 técnicas avanzadas que permite el C++, no deberías tener los mismos problemas de apuntadores en C++ que se tienen en C (¿no era que mejor no usar apuntadores en C++ si no es absolutamente necesario?).