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 or
a weak_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
.
It also defines two member functions called weak_from_this
that return
a corresponding weak_ptr
.
#include <boost/enable_shared_from_this.hpp> #include <boost/shared_ptr.hpp> #include <cassert> class Y: public boost::enable_shared_from_this<Y> { public: boost::shared_ptr<Y> f() { return shared_from_this(); } }; int main() { boost::shared_ptr<Y> p(new Y); boost::shared_ptr<Y> q = p->f(); assert(p == q); assert(!(p < q || q < p)); // p and q must share ownership }
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; weak_ptr<T> weak_from_this() noexcept; weak_ptr<T const> weak_from_this() const noexcept; } }
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 ofT
.*this
must be a subobject of an instancet
of typeT
.Returns: If a
shared_ptr
instancep
that ownst
exists, ashared_ptr<T>
instancer
that shares ownership withp
.Postconditions:
r.get() == this
.Throws:
bad_weak_ptr
when noshared_ptr
owns*this
.
template<class T> weak_ptr<T>
enable_shared_from_this<T>::weak_from_this() noexcept;
template<class T> weak_ptr<T const>
enable_shared_from_this<T>::weak_from_this() const noexcept;
Requires:
enable_shared_from_this<T>
must be an accessible base class ofT
.*this
must be a subobject of an instancet
of typeT
.Returns: If a
shared_ptr
instancep
that ownst
exists or has existed in the past, aweak_ptr<T>
instancer
that shares ownership withp
. Otherwise, an emptyweak_ptr
.
Copyright © 2002, 2003, 2015 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.