Qt:函数返回对象,将其放入指针中
希望这不是太愚蠢,但我想确保我做得对 有些Qt函数将Qt对象作为值返回,但我们可能希望将它们存储在某个指针中。例如,在QDomDocument中,函数documentElement返回一个QdomeElement,而不是指向它的指针。现在,作为我班的一员,我有:Qt:函数返回对象,将其放入指针中,qt,Qt,希望这不是太愚蠢,但我想确保我做得对 有些Qt函数将Qt对象作为值返回,但我们可能希望将它们存储在某个指针中。例如,在QDomDocument中,函数documentElement返回一个QdomeElement,而不是指向它的指针。现在,作为我班的一员,我有: QDomElement *listRootElement; 在设置内容的函数中,我使用的是: listRootElement = new QDomElement; *listRootElement = mainIndex->do
QDomElement *listRootElement;
在设置内容的函数中,我使用的是:
listRootElement = new QDomElement;
*listRootElement = mainIndex->documentElement();
(mainIndex是一个QDOM文档。)
这似乎有效,但我只是想确保我做得对,没有什么会回来咬我
对于一些可能返回QPixmap的图像函数来说,这非常类似,我想维护指向QPixmap的指针
谢谢你的评论 假设出于某种原因您希望存储指向
qdomeElement
的指针,并假设您知道指针可能存在的缺陷(例如,两个指针可能指向同一个对象):
唯一需要记住的是,流行的“父代负责删除子代”系统,Qt使用的该系统仅适用于
QObject
(子)类。因此,当new
'使用QString
或qdomeElement
或类似内容时,请记住,您也必须自己删除它。我猜,但我认为:
listRootElement = new QDomElement(mainIndex->documentElement());
…可能使编译器能够更好地进行优化(有关某些推理,请参阅)。您正在覆盖最初分配的对象:
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;
这是因为QdomeElement和int都实现赋值运算符(=)
请注意,无需删除任何内容,因为返回的临时对象会复制到新分配的对象中。更详细一点-构造空元素似乎有点浪费。更糟糕的是,如果它是一个没有默认构造函数的类呢。我确实希望能够编辑DOM并从程序的其他地方保存它。有没有一种方法可以在不创建副本的情况下做到这一点?@Micah-我想我错了。通常,更改副本不会影响原始文件,但这些只是使用对象的方法修改的内部结构的包装。