# enable_shared_from_this.hpp

### Purpose

The header <boost/enable_shared_from_this.hpp> defines the class template enable_shared_from_this. It is used as a base class that allows a shared_ptr to the current object to be obtained from within a member function.

enable_shared_from_this<T> defines two member functions called shared_from_this that return a shared_ptr<T> and shared_ptr<T const>, depending on constness, to this.

### Example

    class Y: public enable_shared_from_this<Y>
    {
    public:

        shared_ptr<Y> f()
        {
            return shared_from_this();
        }
    }

    int main()
    {
        shared_ptr<Y> p(new Y);
        shared_ptr<Y> q = p->f();
        assert(p == q);
        assert(!(p < q || q < p)); // p and q must share ownership
    }

### Synopsis

    namespace boost
    {

    template<class T> class enable_shared_from_this
    {
    public:

        shared_ptr<T> shared_from_this();
        shared_ptr<T const> shared_from_this() const;
    }

    }

#### template<class T> shared_ptr<T> enable_shared_from_this<T>::shared_from_this();

#### template<class T> shared_ptr<T const> enable_shared_from_this<T>::shared_from_this() const;

> Requires: enable_shared_from_this<T> must be an accessible base class of T. *this must be a subobject of an instance t of type T . There must exist at least one shared_ptr instance p that owns t.

> Returns: A shared_ptr<T> instance r that shares ownership with p.

> Postconditions: `r.get() == this`.

Copyright © 2002, 2003 by Peter Dimov. Distributed under the Boost Software License, Version 1.0. See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.