qt - C++ - Why do I create these widgets on the heap? -


when creating gui c++ , qt can create label example :

qlabel* label = new qlabel("hey you!", centralwidgetparent); 

this creates object on heap , stay there until either delete manually or parent gets destroyed. question why need pointer that? why not create on stack?

//create member variable of class mainwindow qlabel label;  //set parent show , give text user can see     qwidget* centralwidget = new qwidget(this); //needed add widgets window     this->setcentralwidget( centralwidget );      label.setparent(centralwidget);     label.settext( "haha" ); 

this works fine, can see label , did not vanish.

we use pointers in c++ let live longer can use object in various scopes. when create member variable, won't stay until object gets destroyed?

edit: maybe didn't clarify enough. mainwindow class:

class mainwindow : public qmainwindow {     q_object     qlabel label; //first introduced here...  public:     mainwindow(qwidget *parent = 0);     ~mainwindow(); };  //constructor mainwindow::mainwindow(qwidget *parent)     : qmainwindow(parent) {     qwidget* centralwidget = new qwidget(this);     this->setcentralwidget( centralwidget );     label.setparent(centralwidget);     label.settext( "haha" ); } 

if label gets out of scope, destructor (qlabel::~qlabel) called. docs:

destroys object, deleting child objects.

it not necessary create object on heap - put object on stack, need responsible lifetime of object (the 1 of problematic issues allocating data on heap question of "who , when should delete these objects?", , in qt handled hierarchy - whenever delete widget, child widgets deleted).

why program works - don't know - may not work (label destroyed @ end of scope). issue - how change text of label (from slot, example) if don't have reference it?

edit saw label member of mainwindow. fine have complete objects, , not pointer objects member of class, not destroyed before mainwindow is. please note if create instance of mainwindow this:

mainwindow *w = new mainwindow(); 

label created on heap.


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -