Lifetime of Qt Objects

馋奶兔 提交于 2019-12-05 20:00:34

问题


What are the lifetimes of Qt Objects?

Such as:

QTcpSocket *socket=new QTcpSocket();

When socket will be destroyed? Should I use

delete socket;

Is there any difference with:

QTcpSocket socket;

I couldn't find deep infromation about this, any comment or link is welcomed.


回答1:


Qt uses parent-child relationships to manage memory. If you provide the QTcpSocket object with a parent when you create it, the parent will take care of cleaning it up. The parent can be, for example, the GUI window that uses the socket. Once the window dies (i.e. is closed) the socket dies.

You can do without the parent but then indeed you have to delete the object manually.

Personally I recommend sticking to idiomatic Qt and using linking all objects into parent-child trees.




回答2:


Objects allocated with new must be released with delete.

However, with Qt, most objects can have a parent, which you specify as an argument to the constructor. When the parent is deleted, the child objects get deleted automatically.




回答3:


If you don't want to pass a parent for some reason (because there is no QObject where it makes sense to own the socket object), you can also use a QSharedPointer to manage the lifetime.



来源:https://stackoverflow.com/questions/3264420/lifetime-of-qt-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!