c++boostboost-smart-ptr

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;
}

Solution

  • 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