Какие сборщики мусора доступны для C++? Вы используете любой из них? С какими результатами?Какие сборщики мусора доступны для C++?
ответ
Библиотека Boost включает в себя некоторые материалы shared_ptr, которые в основном действуют как счетчик сбора мусора. Если вы примете принцип дизайна C+, то и auto_ptr заполнит вашу потребность в «сборщике мусора».
Нет, если вы хотите иметь возможность моделировать циклические ссылки. –
@ DanielEarwicker: На самом деле Boost также содержит weak_ptr, чтобы решить это. –
@JosephGarvin True - но тогда вам нужно выбрать правильный. С GC вы этого не сделали (о чем спрашивал ОП). –
Единственный, о котором я слышал лично, это Boehm garbage collector Я уверен, что другие существуют, но я не занимался ими (или искал их).
Несколько C++ GC перечислены on wikipedia.
Однако, я не использую никаких, RAII также является моим другом.
Сборщик мусора Boehm очень хорош для C, но сложнее использовать его под C++. Проверьте раздел «C++ interface» на странице http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html.
Мое мнение таково, что если вам нужна сборка мусора, выберите язык, в котором он встроен.
Лучшее общее решение для C++ - это общие указатели (например, от boost), когда вы имеете дело с круговыми зависимостями. Есть две вещи, которые вы можете сделать: 1. Конструкция вещь, без круговых зависимостей 2. дизайн вещь с «откидным выводами», преодолевший круг, чтобы рекультивацию объектов
Либо вы имеете дело с реальными плохо, запутанно, трудно отлаживать проблемы с сборщиком мусора для C++ или вы имеете дело с более простой классической проблемой освобождения ваших объектов, когда вы с ними закончите.
Там всегда, гм: C++/CLI - C++ для .NET Framework. Довольно хорошая сборка мусора. : p
Хотя, честно говоря, со всем синтаксическим сахаром, который они там размещают, вы могли бы почти считать его совершенно новым языком, который просто хорошо работает с C/C++.
Если вы не состоите в браке с C++ в качестве языка, вы также можете изучить D, который компилируется в собственный код, например C++ (и в отличие от C++/CLI), но также имеет сборку мусора.
Вы можете найти несколько реализаций here. Я никогда не пробовал никого из них, и в целом я считаю, что не детерминированный GC вызывает больше вреда, чем пользы.
Нет необходимости в сборщике мусора в общем случае, поскольку интеллектуальные указатели C++ превосходят и дают детерминированное разрушение. Если у вас есть конкретный «пример использования» для сбора мусора, возможно, мы сможем задуматься над вопросом. –
@Martin - ваш комментарий выглядит как ответ. Вы должны опубликовать его, чтобы люди могли правильно проголосовать за него. – Aaron
Boehm представил презентацию для комитета ISO C++ по GC (2004 IIRC, когда интеллектуальные указатели были хорошо известны), поэтому, похоже, мнение Мартинса не следует указывать как факт. – MSalters