Chris@16: // Chris@16: // detail/scoped_ptr.hpp Chris@16: // ~~~~~~~~~~~~~~~~~~~~~ Chris@16: // Chris@101: // Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com) Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: Chris@16: #ifndef BOOST_ASIO_DETAIL_SCOPED_PTR_HPP Chris@16: #define BOOST_ASIO_DETAIL_SCOPED_PTR_HPP Chris@16: Chris@16: #if defined(_MSC_VER) && (_MSC_VER >= 1200) Chris@16: # pragma once Chris@16: #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) Chris@16: Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace asio { Chris@16: namespace detail { Chris@16: Chris@16: template Chris@16: class scoped_ptr Chris@16: { Chris@16: public: Chris@16: // Constructor. Chris@16: explicit scoped_ptr(T* p = 0) Chris@16: : p_(p) Chris@16: { Chris@16: } Chris@16: Chris@16: // Destructor. Chris@16: ~scoped_ptr() Chris@16: { Chris@16: delete p_; Chris@16: } Chris@16: Chris@16: // Access. Chris@16: T* get() Chris@16: { Chris@16: return p_; Chris@16: } Chris@16: Chris@16: // Access. Chris@16: T* operator->() Chris@16: { Chris@16: return p_; Chris@16: } Chris@16: Chris@16: // Dereference. Chris@16: T& operator*() Chris@16: { Chris@16: return *p_; Chris@16: } Chris@16: Chris@16: // Reset pointer. Chris@16: void reset(T* p = 0) Chris@16: { Chris@16: delete p_; Chris@16: p_ = p; Chris@16: } Chris@16: Chris@16: private: Chris@16: // Disallow copying and assignment. Chris@16: scoped_ptr(const scoped_ptr&); Chris@16: scoped_ptr& operator=(const scoped_ptr&); Chris@16: Chris@16: T* p_; Chris@16: }; Chris@16: Chris@16: } // namespace detail Chris@16: } // namespace asio Chris@16: } // namespace boost Chris@16: Chris@16: #include Chris@16: Chris@16: #endif // BOOST_ASIO_DETAIL_SCOPED_PTR_HPP