при чтении "За пределами стандартной библиотеки C ++: Введение в Boost" я получил очень интересный пример:
class A
{
public:
virtual void sing()=0;
protected:
virtual ~A() {};
};
class B : public A
{
public:
virtual void sing( )
{
std::cout << "Do re mi fa so la"<<std::endl;;
}
};
и провожу небольшое тестирование:
int main()
{
//1
std::auto_ptr<A> a(new B); //will not compile ,error: ‘virtual A::~A()’ is protected
//2
A *pa = new B;
delete pa; //will not compile ,error: ‘virtual A::~A()’ is protected
delete (dynamic_cast<B*>(pa)); //ok
//3
boost::shared_ptr<A> a(new B);//ok
}
мне очень любопытно вот как ~ shared_ptr работает? как он выводит производный класс B?
Заранее спасибо за вашу помощь!
Всем спасибо, скажем, на неделю?