Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt:函数返回对象,将其放入指针中_Qt - Fatal编程技术网

Qt:函数返回对象,将其放入指针中

Qt:函数返回对象,将其放入指针中,qt,Qt,希望这不是太愚蠢,但我想确保我做得对 有些Qt函数将Qt对象作为值返回,但我们可能希望将它们存储在某个指针中。例如,在QDomDocument中,函数documentElement返回一个QdomeElement,而不是指向它的指针。现在,作为我班的一员,我有: QDomElement *listRootElement; 在设置内容的函数中,我使用的是: listRootElement = new QDomElement; *listRootElement = mainIndex->do

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

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

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-我想我错了。通常,更改副本不会影响原始文件,但这些只是使用对象的方法修改的内部结构的包装。