Deletion of pointer to incomplete type and smart pointers

При попытке использовать auto_ptr с типом, который был объявлен с помощью прямого объявления, например:

class A;
...
std::auto_ptr<A> a;

деструктор A не вызывается (очевидно, потому что auto_ptr внутренне удаляет базовый указатель, а деструктор для неполного типа не может быть вызван).

Однако, тот же код работает нормально, и деструктор вызывается при использовании std :: shared_ptr вместо std :: auto_ptr . Как это можно объяснить?

19
задан Ruggero Turra 22 March 2015 в 00:45
поделиться