2009-01-21 7 views
6

Какие сборщики мусора доступны для C++? Вы используете любой из них? С какими результатами?Какие сборщики мусора доступны для C++?

+0

Нет необходимости в сборщике мусора в общем случае, поскольку интеллектуальные указатели C++ превосходят и дают детерминированное разрушение. Если у вас есть конкретный «пример использования» для сбора мусора, возможно, мы сможем задуматься над вопросом. –

+0

@Martin - ваш комментарий выглядит как ответ. Вы должны опубликовать его, чтобы люди могли правильно проголосовать за него. – Aaron

+0

Boehm представил презентацию для комитета ISO C++ по GC (2004 IIRC, когда интеллектуальные указатели были хорошо известны), поэтому, похоже, мнение Мартинса не следует указывать как факт. – MSalters

ответ

6

Библиотека Boost включает в себя некоторые материалы shared_ptr, которые в основном действуют как счетчик сбора мусора. Если вы примете принцип дизайна C+, то и auto_ptr заполнит вашу потребность в «сборщике мусора».

+1

Нет, если вы хотите иметь возможность моделировать циклические ссылки. –

+0

@ DanielEarwicker: На самом деле Boost также содержит weak_ptr, чтобы решить это. –

+0

@JosephGarvin True - но тогда вам нужно выбрать правильный. С GC вы этого не сделали (о чем спрашивал ОП). –

4

Единственный, о котором я слышал лично, это Boehm garbage collector Я уверен, что другие существуют, но я не занимался ими (или искал их).

5

Несколько C++ GC перечислены on wikipedia.

Однако, я не использую никаких, RAII также является моим другом.

5

Сборщик мусора Boehm очень хорош для C, но сложнее использовать его под C++. Проверьте раздел «C++ interface» на странице http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html.

Мое мнение таково, что если вам нужна сборка мусора, выберите язык, в котором он встроен.

Лучшее общее решение для C++ - это общие указатели (например, от boost), когда вы имеете дело с круговыми зависимостями. Есть две вещи, которые вы можете сделать: 1. Конструкция вещь, без круговых зависимостей 2. дизайн вещь с «откидным выводами», преодолевший круг, чтобы рекультивацию объектов

Либо вы имеете дело с реальными плохо, запутанно, трудно отлаживать проблемы с сборщиком мусора для C++ или вы имеете дело с более простой классической проблемой освобождения ваших объектов, когда вы с ними закончите.

2

Там всегда, гм: C++/CLI - C++ для .NET Framework. Довольно хорошая сборка мусора. : p

Хотя, честно говоря, со всем синтаксическим сахаром, который они там размещают, вы могли бы почти считать его совершенно новым языком, который просто хорошо работает с C/C++.

Если вы не состоите в браке с C++ в качестве языка, вы также можете изучить D, который компилируется в собственный код, например C++ (и в отличие от C++/CLI), но также имеет сборку мусора.

2

Вы можете найти несколько реализаций here. Я никогда не пробовал никого из них, и в целом я считаю, что не детерминированный GC вызывает больше вреда, чем пользы.