По последним данным, на рынке продается по крайней мере 2 768 942 книги о С++, не говоря уже о всевозможных курсах, обучающих программах, журналах и семинарах с коктейлями. И все же в этом изобилии наблюдается удручающее однообразие.
Одна из стратегий уплотнения и сборки мусора в С++, которая заимствует кое-что из динамических языков - ссылаться на все объекты только через дескрипторы.
class Foo {
private:
H<Bar> bar; // Дескриптор Bar
public:
H<Bar> GetBar() { return bar; }
};
Здесь H - шаблон дескриптора (вроде тех, которые мы рассматривали в предыдущих главах). Каждый H<Bar> представляет собой умный указатель на ведущий указатель на Bar. Функции, косвенно открывающие переменные класса (такие как GetBar()), возвращают копию дескриптора. Все ведущие указатели (по крайней мере, в этой версии) живут в специальном пространстве памяти, поэтому найти их несложно.
Ниже описывается одна из несложных реализаций уплотнения с применением дескрипторов. Конечно, возможны и другие варианты.
Просматривать полку книг о С++ в книжном магазине ничуть не интереснее, чем литературу по бухгалтерии. В сущности, все книги пересказывают одно и то же и отличаются разве что по весу и количеству цветов в диаграммах и таблицах.