Так как 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<Interface>
(или make_shared<Interface>
), вам действительно нужен деструктор virtual
? Я бы объявил его virtual
в любом случае, но я просто хочу знать, поскольку shared_ptr
всегда будет удалять тип, с которым он был инициализирован (если не задан другой пользовательский отладчик).