Qt:function返回对象,将其放入指针

时间:2010-10-12 10:47:21

标签: qt

希望这不是太愚蠢,但我想确保我做得对。

有些Qt函数将Qt对象作为值返回,但我们可能希望将它们存储在某处的指针中。例如,在QDomDocument中,函数documentElement返回一个QDomElement,而不是指向它的指针。现在,作为我班上的一员,我有:

QDomElement *listRootElement;

在一个设置的功能中,我正在使用它:

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

(mainIndex是QDomDocument。)

这似乎有效,但我只是想确保我做得对,并且没有任何东西会回来咬我。

对于某些可能返回QPixmap的图像函数,它会非常相似,我想保留指向QPixMap的指针。

感谢您的任何评论!

3 个答案:

答案 0 :(得分:0)

假设您出于某种原因想要存储指向QDomElement的指针,并假设您已经意识到指针可能存在陷阱(例如,两个指针可能指向同一个对象):

唯一需要记住的是,流行的'父母负责删除子系统',Qt使用的系统仅适用于QObject(子)类。因此,当new使用QStringQDomElement或类似内容时,请记住必须自己delete,太

答案 1 :(得分:0)

我猜,但我想这个:

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

...可能允许编译器更好地进行优化(出于某种原因,请参阅this question。)

答案 2 :(得分:0)

您正在覆盖最初分配的对象:

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

你基本上是这样做的:

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

这是有效的,因为QDomElement和int都实现赋值运算符(=)。

请注意,无需删除任何内容,因为返回的临时文件将复制到新分配的对象中。