Здравствуйте, andrey_nado, Вы писали:
_>Здравствуйте, rg45, Вы писали:
_>А что будет в следующем случае:
_>_>boost::shared_ptr<IFoo> p = items[0];
_>// Объект items удалён, p - единственный владелец указателя
p->>bar();
_>// А теперь p должен быть уничтожен с удалением объекта класса IFoo
_>// Какой деструктор будет вызван?
_>
Будет вызван деструктор производного класса, я пример приводил для иллюстрации именно этого факта. Объясняется это просто: в момент создания экземпляра
boost::shared_ptr в нем запоминается не только указатель на объект, но также и функционал
deleter, который обеспечивает корректное удаление адресуемых объектов, даже после преобразований.
Еще один аргумент. Деструктор абстрактного класса
IFoo в моем примере объявлен защищенным, это является гарантией того, что извне класса этот деструктор не может быть вызван. Поэтому, если Ваша программа откомпилировалась без ошибок, на этот счет можете не волноваться