2011-01-21 4 views
8

Может ли boost::smart_ptr, например scoped_ptr и shared_ptr, использоваться в полиморфизме?Может ли boost :: smart_ptr использоваться в полиморфизме?

class SomeClass 
{ 
public: 
    SomeClass() 
    { 
     a_ptr.reset(new SubClass); 
    } 
private: 
    boost::scoped_ptr<SuperClass> a_ptr; 
} 
+3

Вы пробовали? –

+0

@Noah, я пробовал и имел утечки памяти. Я не был уверен, что это была причина, поэтому я хотел проконсультироваться. – Jonathan

+1

Время, чтобы начать искать циркулярные ссылки, я полагаю. :) – James

ответ

4

Да:

#include <string> 
#include <iostream> 
using namespace std; 
#include <boost\shared_ptr.hpp> 
using namespace boost; 


class Foo 
{ 
public: 
    virtual string speak() const { return "Foo"; } 
    virtual ~Foo() {}; 
}; 

class Bar : public Foo 
{ 
public: 
    string speak() const { return "Bar"; } 
}; 

int main() 
{ 
    boost::shared_ptr<Foo> my_foo(new Bar); 
    cout << my_foo->speak(); 
} 

Выход: Bar

6

Я считаю, что да; указатели форматирования кодируются таким образом, чтобы производные классы принимались везде, где был бы суперкласс.

Смежные вопросы