当按值传递时,包含指针的QList如何表现

时间:2014-11-02 19:38:52

标签: c++ qt deep-copy qtcore qlist

假设您有包含指针QList<SomeThingCool*>的QList,并将其传递给具有签名void doCoolStuff(QList<SomeThingCool*> list)的方法,这种调用的空间和时间影响是什么?

我的猜测是会有一些开销,因为会创建一个QList对象的副本,但是我们不需要做深度复制,因为我们正在处理指针。

行为的一个区别是,如果doCoolStuff对列表进行修改,原始列表将保持不变。

1 个答案:

答案 0 :(得分:1)

您所写的内容对于通用C ++是正确的,但是在其他一些Qt类中,QList在这方面有点特殊。它是implicitly shared a class,又名。 copy-on-write (COW)。这是什么意思,是吗?

您解释的唯一补充是,如果您不打算修改方法或函数体内的列表,则列表将被隐式共享,这意味着共享数据指针将只是额外的空间约束。 / p>

如果您打算修改函数或方法体内的列表,则会为列表创建一个深层副本。当然,你的指针仍然会被轻微复制,因为它们是指针。

至于时间维度,通过对此类隐式使用此技术,如果不进行任何修改,则可以节省复制列表所花费的时间。