как работает boost :: ~ shared_ptr?

при чтении "За пределами стандартной библиотеки 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?

Заранее спасибо за вашу помощь!

Всем спасибо, скажем, на неделю?

6
задан Andrew Ebling 30 December 2010 в 06:03
поделиться