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