Op 23-4-2012 20:44, Nikos Chantziaras schreef:
Then you're not doing what you think you're doing:
QList< QList<int> > listOfLists;
QList<int> listOfInts;
listOfInts.append(10);
listOfLists.append(listOfInts);
listOfLists[0][0] = 9;
qDebug()<< listOfLists[0][0]<< listOfInts[0];
You are modifying a copy, so it prints "9 10" instead of "10 10". This:
listOfLists[0][0] = 9;
modifies a copy of listOfInts. Also the reverse is true. If you modify
listOfInts, then the copy of it inside listOfLists is not updated.
"Implicit sharing" means that data is copied when it's modified. It's
not a replacement for pointers.
Not true, in this case. Let's look at the signature of the operator that
Scott is using:
T & QList<T>::operator[](int i);
Note the little & after the first T? That's right, it returns a
*reference*. And a reference is something you can directly modify. The
documentation for that method also explicitly states that:
> Returns the item at index position/i/as a *modifiable* reference.
Your statement that "implicit sharing" means that a copy is made when
data is modified, is way too general. That is only true if you actually
*have* a (shared) copy (which you don't in this case).
And yes, I'm pretty sure Scott knows what he is doing, he is quite
experienced...
André
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest