# 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. Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.