Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can boost::smart_ptr be used in polymorphism?

Can boost::smart_ptr such as scoped_ptr and shared_ptr be used in polymorphism?

class SomeClass
{
public:
    SomeClass()
    {
        a_ptr.reset(new SubClass);
    }
private:
    boost::scoped_ptr<SuperClass> a_ptr;
}
like image 945
Jonathan Livni Avatar asked Jan 21 '11 21:01

Jonathan Livni


2 Answers

I believe the answer is yes; boost pointers are coded such that derived classes are accepted wherever a superclass would be.

like image 160
James Avatar answered Nov 08 '22 00:11

James


Yes:

#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();
}

Output is: Bar

like image 44
John Dibling Avatar answered Nov 08 '22 02:11

John Dibling