假设您有包含指针QList<SomeThingCool*>
的QList,并将其传递给具有签名void doCoolStuff(QList<SomeThingCool*> list)
的方法,这种调用的空间和时间影响是什么?
我的猜测是会有一些开销,因为会创建一个QList对象的副本,但是我们不需要做深度复制,因为我们正在处理指针。
行为的一个区别是,如果doCoolStuff
对列表进行修改,原始列表将保持不变。
答案 0 :(得分:1)
您所写的内容对于通用C ++是正确的,但是在其他一些Qt类中,QList
在这方面有点特殊。它是implicitly shared a class,又名。 copy-on-write (COW)。这是什么意思,是吗?
您解释的唯一补充是,如果您不打算修改方法或函数体内的列表,则列表将被隐式共享,这意味着共享数据指针将只是额外的空间约束。 / p>
如果您打算修改函数或方法体内的列表,则会为列表创建一个深层副本。当然,你的指针仍然会被轻微复制,因为它们是指针。
至于时间维度,通过对此类隐式使用此技术,如果不进行任何修改,则可以节省复制列表所花费的时间。