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