Пописываю тут на досуге свой контейнер, все вобщем шло хорошо пока не дошел до момента реализации COW.
Предположим у нас есть два объекта ссылающихся на одни данные и итератор, тоже ссылающийся на что-то внутри этих данных, созданный при помощи первого объекта. Тут кто-то берет и изменяет первый объект, он делает свою копию и продолжает спокойно жить, но косяк в том, что итератор продолжает ссылаться на данные, которые теперь принадлежат второму объекту. как-бы это разрулить? хранить в объекте указатели на все его итераторы и дергать их?
хотел посомтреть как сделано в qt, но:
QList<int> a;
a.append(56);
a.append(746);
a.append(4566);
QList<int>::const_iterator it = a.begin();
qDebug() << a.first();
qDebug() << *it;
qDebug() << "-----------";
QList<int> b(a);
a.first() = 9999;
qDebug() << a.first();
qDebug() << *it;
qDebug() << "-----------";
56
56
-----------
9999
56 <------------- ОЧЕНЬ ПРИЛИЧНОЕ ВЫРАЖЕНИЕ!!!!
-----------