Есть ли у С++ сборщик мусора?

В настоящее время я читаю неизданный доклад о тезисах, который я собираюсь дать.

В отчете упоминается GC под собственным С++ и управляемым С++. Я думал, что у С++ не было стандартного GC, я ошибаюсь или прав? (Они не упоминают Бем-Демерса-Вайзера.)

У них есть некоторая проблема заставить его работать при некоторых условиях. Они создают объекты в одном потоке и удаляют указатель из другого потока.

Ответ 1

Управляемый С++ (и его преемник С++/CLI), конечно, использует сборку мусора .NET для управляемых ресурсов (хотя собственные ресурсы не собираются с мусором, и их нужно управлять вручную, как на родном С++).

У Native С++ по умолчанию нет такой вещи (ближайшая вещь для этого - умные указатели, но это все еще что-то совсем другое), но это не мешает вам писать собственное решение для сбора мусора (или используя стороннее решение).

Ответ 2

Существующий стандарт С++ 1998/2004 не указывает сборщик мусора. Предстоящий стандарт С++ 0x задает необязательный API-интерфейс сборщика мусора, однако реализация является другой частью. Со всем сказанным, есть сборщики мусора, доступные для С++ от поставщиков компиляторов и сторонних разработчиков.

  • GCC-пакет предоставляет Boehm-GC для сбора мусора.
  • Управляемый С++ был расширением Microsoft для С++, выпущенным с .Net 1.0, который расширил возможности С++ с помощью средств сбора мусора.
  • Существует также C + +/CIL из Microsoft, выпущенный с .Net 2, который устарел на Managed С++ с большим количеством функций .Net.
  • Sun Предоставлено libgc как сборщик мусора для C/С++.

Ответ 3

Единственная библиотека GC для C и С++ - библиотека Hans-Boehm, но насколько я знаю, ее сложно установить.

Ответ 4

У меня есть другое взятие GC в С++.

Посмотрите MCP (лицензия с открытым исходным кодом GPLv3) - GC с С++ не должен быть хуже, чем GJC/Mono.