Поскольку boost :: / std :: shared_ptr
имеют преимущество стирания типов их удалителя, вы можете делать такие приятные вещи, как
#include <memory>
typedef std::shared_ptr<void> gc_ptr;
int main(){
gc_ptr p1 = new int(42);
gc_ptr p2 = new float(3.14159);
gc_ptr p3 = new char('o');
}
И это будет правильно удалите весь указатель благодаря сохранению правильного удаления.
Если вы гарантируете, что каждая реализация вашего интерфейса всегда создается с помощью shared_ptr
(или make_shared
) , вам действительно нужен виртуальный
деструктор? В любом случае я бы объявил его виртуальным
,но я просто хочу знать, поскольку shared_ptr
всегда удаляет тип, которым он был инициализирован (если не указан другой пользовательский удалитель).