По последним данным, на рынке продается по крайней мере 2 768 942 книги о С++, не говоря уже о всевозможных курсах, обучающих программах, журналах и семинарах с коктейлями. И все же в этом изобилии наблюдается удручающее однообразие.
Объекты, которые существуют за пределами пространства сборки мусора, слегка усложняют нашу задачу. Объекты внутри пространства могут ссылаться на эти «внешние» объекты. Само по себе это не вызовет проблем, поскольку перемещаются только объекты неактивной половины. Проблемы возникают в ситуациях, когда внешние объекты ссылаются на внутренние. Вероятно, они будут использовать дескрипторы, но это заметно повысит сложность алгоритма сборки мусора/уплотнения.
Потребуются следующие изменения:
1. Каждый внешний объект также должен обладать средствами перебора указателей и соблюдать правило «дескрипторы повсюду», по крайней мере для ссылок на внутренние объекты.
2. Каждый внешний объект во время очередного прохода должен уметь помечать себя как
просмотренный.
3. Если объект в функции Copy1() является внешним и непомеченным, он помечается, а его
итератор заносится в стек, но сам объект при этом не перемещается.