我创建了一个明确共享的类Foo
。在我的程序中,我有一个数据成员QVector<Foo> data;
,我通过引用在不同的类之间传递,以优化内存使用。
在运行时期间,对象可能会更改data
的特定元素。例如:
Foo item = data.at(0);
item.setName("newName");
我想知道是否由于COW而对新矢量进行了深度复制,或者只是位置Foo
的{{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
。