2012-04-03 82 views
0

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

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

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

我想知道,如果一个新的载体,是因为母牛的深拷贝或者是它只是Foo对象的位置0只是更名?

回答

1

在您的示例中item包含data中位置0的Foo项目的副本。这是因为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

+0

谢谢你的错字提示:) 我认为你是对的,at()函数返回一个const引用,所以应该使用operator []来修改元素。 但是这使我更加困惑,因为我认为如果容器的元素被修改,将创建一个新的向量副本。我对么? – 2012-04-03 14:19:39

+0

这取决于你对QVector的引用是const还是non-const。 – 2012-04-03 14:34:51