При попытке использовать auto_ptr
с типом, который был объявлен с помощью прямого объявления, например:
class A;
...
std::auto_ptr<A> a;
деструктор A
не вызывается (очевидно, потому что auto_ptr
внутренне удаляет
базовый указатель, а деструктор для неполного типа не может быть вызван).
Однако, тот же код работает нормально, и деструктор вызывается при использовании std :: shared_ptr
вместо std :: auto_ptr
.
Как это можно объяснить?