Bonjour les amis !
La plupart des programmeurs de C++ réagiront à ce code, nous faisons un new, mais aucun delete. Il est fait par la classe de base de laquelle nos widgets sont dérivés. Mais je ne comprends pas, comment ? Je pense pas que MFC de Visual C++ ne permet pas de faire ça, donc c'est une spécificité de Qt ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include <qlcdnumber.h> #include <qslider.h> #include "mywidget.h" MyWidget::MyWidget( QWidget *parent, char *name ) : QVBox( parent, name ) { QLCDNumber *lcd = new QLCDNumber( this ); QSlider *s = new QSlider( QSlider::Horizontal, this ); connect( s, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) ); }
QMyObject est ici une classe héritant QObject, pourquoi mon code provoque une fuite de mémoire tandis que mon second n'en fait pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 int main( int argc, char **argv ) { // Create an application QApplication a( argc, argv ); // Create instances QMyObject top( 0, "top" ); QMyObject *x = new QMyObject( &top, "x" ); QMyObject *y = new QMyObject( &top, "y" ); QMyObject *z = new QMyObject( x, "z" ); // Do stuff to stop the optimizer top.doStuff(); x->doStuff(); y->doStuff(); z->doStuff(); return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 int main( int argc, char **argv ) { // Create an application QApplication a( argc, argv ); // Create instances QMyObject top( 0, "top" ); QMyObject *x = new QMyObject( 0, "x" ); QMyObject *y = new QMyObject( 0, "y" ); QMyObject *z = new QMyObject( x, "z" ); // Do stuff to stop the optimizer top.doStuff(); x->doStuff(); y->doStuff(); z->doStuff(); return 0; }
Partager