C ++ список уничтожения - PullRequest
       12

C ++ список уничтожения

1 голос
/ 09 октября 2011

У меня есть класс для вычисления с использованием некоторых обратных вызовов. эти обратные вызовы должны выделять данные (динамические массивы), которые должны находиться за пределами области обратного вызова, но не после разрушения класса. Я думал о том, чтобы создать vector из auto_ptr, который будет автоматически уничтожен, когда класс уничтожит:

class MyClass
{
    vector<auto_ptr<MyObject>> ThingsToDie;
};

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

auto_ptr_base (virtual destructor)
      |
 auto_ptr<T>

Решит мою проблему, потому что я мог бы сделать что-то вроде

class MyClass
{
    vector<auto_ptr_base> ThingsToDie;
};

и уничтожение будет фактически отправлено каждому специализированному типу автоматически.
Проблема в том, что STL не имеет такой иерархии, и я не хочу повторно реализовывать auto_ptr.
Есть ли другое решение для этого?

1 Ответ

5 голосов
/ 09 октября 2011

Вы можете использовать vector<shared_ptr<void>>.

Прочитайте это: Почему std :: shared_ptr работает

...