Jakiś czas temu doczytałem, iż wiele klas Qt jest implicit sharing .. mniej więcej rozumiem to 'zjawisko' (w skórcie: nie jest przekazywana kopia (przez wartość) ale sam wskaźnik; i zwiększany jest tzw. refcount), ale chciałbym się odnieść do konkretnych przypadków użycia..
Mam powiedzmy taki kod: (nie ma on za bardzo sensu 'logicznego', ale nie musi mieć .. :) )
QList<QVariant> function(QStringList list)
{
QList<QVariant> l;
...
if(list.at(2) == l.at(2))
return l;
}
Z wiedzy, którą na ten moment posiadam (klasy QStringList i QList są implicit sharing ) to zarówno na zmiennej list
jak i zwracanej l
operacje będą wykonywane poprzez wskaźnik, tak ? (czyli będzie zachowana swoista oszczędność pamięci ?)
A czy zapis w/w kodu z operatorami referencji &
coś zmienia:
QList<QVariant>& function(const QStringList& list)
{
QList<QVariant> l;
...
if(list.at(2) == l.at(2))
return l;
}
? (bo w przypadku 'czystego' C++ ten drugi zapis jest bardziej odpowiedni..)