开发者

Qt: function returns object, putting it into a pointer

开发者 https://www.devze.com 2023-01-19 11:03 出处:网络
Hopefully this isn\'t too stupid but I want to make sure I\'m doing this right. Some Qt functions return Qt objects as values, but we may want to store them in a pointer somewhere.For example, in QDo

Hopefully this isn't too stupid but I want to make sure I'm doing this right.

Some Qt functions return Qt objects as values, but we may want to store them in a pointer somewhere. For example, in QDomDocument, the function documentElement returns a QDomElement, not a pointer to it. Now, as a member of my class I have:

QDomElement *listRootElement;

In a function that sets things up I am using this:

listRootElement = new QDomElement;
*listRootElement = mainIndex开发者_如何学C->documentElement();

(mainIndex is a QDomDocument.)

This seems to work, but I just want to make sure I'm doing it right and that nothing will come back to bite me.

It would be very similar for some of the image functions where a QPixmap might be returned, and I want to maintain pointers to QPixMap's.

Thanks for any comments!


Assuming that you want to store a pointer to a QDomElement for some reason, and assuming that you aware of the potential pitfalls with pointers (like, two pointers might point to the same object):

The only thing to keep in mind is that the popular 'parent takes care of deleting children' system which Qt uses is only available for QObject (sub-)classes. So when new'ing a QString or a QDomElement or something like that, keep in mind that you do have to delete it yourself, too.


I'm guessing, but I think this:

listRootElement = new QDomElement(mainIndex->documentElement());

...may allow the compiler to optimise better (see this question for some reasoning).


You're overwriting the initially allocated object:

QDomElement *listRootElement; // undefined ptr value, I'd prefer null or new right away
listRootElement = new QDomElement;
*listRootElement = mainIndex->documentElement();

You're essentially doing:

int *x = new int(42);
*x = 47;

This works because both QDomElement and int implements the assignment operator (=).

Note that there's no need to delete anything, as the returned temporary is copied into your newly allocated object.

0

精彩评论

暂无评论...
验证码 换一张
取 消