Qt隐式共享明确共享项的容器

时间:2012-04-03 14:03:49

标签: qt memory-management

我创建了一个明确共享的类Foo。在我的程序中,我有一个数据成员QVector<Foo> data;,我通过引用在不同的类之间传递,以优化内存使用。

在运行时期间,对象可能会更改data的特定元素。例如:

Foo item = data.at(0);
item.setName("newName");

我想知道是否由于COW而对新矢量进行了深度复制,或者只是位置Foo的{​​{1}}对象仅更改了其名称?

1 个答案:

答案 0 :(得分:1)

在您的示例中,item包含Foo中位置0的data项的副本。这是因为QVector::at()返回一个const引用,而=表示将其复制到item

如果你有:

Foo & item = data[0];
item.setName("newName"); // <--- typo of single quotes here in your version

QVector中位置0的Foo项现在将具有名称“newName”,因为在此示例中,item是引用,QVector运算符[]返回非const引用实际的Foo