Есть ли класс сборки мусора для C ++ - PullRequest
3 голосов
/ 19 июня 2011

Есть ли класс, который делает сборку мусора для C ++.Я думал что-то вроде:

class A : public GarbageCollected<A>
{
  void kill()
  {
     GarbageCollected<A>.set_cleanup_flag();
  }
  ...
private:
  GarbageCollectedPointer<B> b_pointer; // Somehow we follow 
  GarbageCollectedPointer<B> b_pointer2; // these pointers.
};

class B
{
  ...
};

class GarbageContainer
{
  ...
};

int main()
{
  GarbageContainer gc;
  gc.add(new A());
  ...
}

Идея заключалась в том, что GarbageContainer будет метить и сканировать объекты или какой-либо другой метод сбора мусора.Это избавило бы от необходимости делать подсчет ссылок и использовать уязвимые места, и сборщик мусора можно было бы использовать только для объектов, в которых это было необходимо.

Есть ли библиотеки, которые реализуют что-то подобное?

Ответы [ 3 ]

2 голосов
/ 20 июня 2011

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

shared_ptr освобождает память, когда не осталось объектов, ссылающихся на блок памяти (счетчик ссылок достиг 0).

1 голос
/ 19 июня 2011

Посмотрите сборщик мусора Бема.Я не думаю, что он имеет несколько контейнеров GC из коробки, но вы можете добавить эту функцию самостоятельно, если она вам абсолютно необходима.

0 голосов
/ 19 июня 2011

libgc - хороший вариант для библиотеки сборки мусора в C / C ++

...