Разработка сборщика мусора на С++ |
С++ — мощный и богатый возможностями язык, поэтому встроить в него сборщик мусора можно разными способами. Один очевидный, но ограниченный подход — создание базового класса (base class) сборщика мусора, который в дальнейшем будет наследоваться другими классами при необходимости использования в них сбора мусора. Такой подход позволит вам реализовать сбор мусора на основе перехода от класса к классу (class-by-class basis). Этот вариант, к сожалению, слишком ограничен, чтобы быть удовлетворительным. Лучшим представляется решение, в котором сборщик мусора может использоваться для динамически размещенного объекта любого типа. Для этого сборщик мусора должен удовлетворять следующим требованиям. 1. Сосуществовать с встроенным в С++ способом управления. динамической памятью вручную. 2. Не нарушать уже существующий код. Более того, он не должен никак влиять на созданный ранее код. 3. Работать настолько незаметно, что приложения, использующие сбор мусора, должны функционировать точно так же, как и программы, его не применяющие. 4. Выделять память, используя операцию new тем же способом, что и встроенный в С++ метод управления динамической памятью вручную. 5. Работать со всеми типами данных, включая встроенные типы, такие как: int И double. 6. Быть простым в использовании. Вывод: система сбора мусора должна динамически распределять память, применяя механизм и синтаксис, очень похожие на те, что используются в языке С++, и не затрагивать существующий код. На первый взгляд, задача кажется устрашающей, но это вовсе не так.
|