sp_counted_impl.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 118 行

HPP
118
字号
#ifndef BOOST_INTERPROCESS_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED#define BOOST_INTERPROCESS_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED// MS compatible compilers support #pragma once#if defined(_MSC_VER) && (_MSC_VER >= 1020)# pragma once#endif////  This file is the adaptation for shared memory memory mapped//  files of boost/detail/sp_counted_impl.hpp////  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.//  Copyright 2004-2005 Peter Dimov//  Copyright 2006      Ion Gaztanaga//// 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)//#include <boost/interprocess/detail/config_begin.hpp>#include <boost/interprocess/detail/workaround.hpp>#include <boost/interprocess/smart_ptr/detail/sp_counted_base.hpp>#include <boost/interprocess/smart_ptr/scoped_ptr.hpp>#include <boost/interprocess/detail/utilities.hpp>namespace boost {namespace interprocess {namespace detail {template<class A, class D>class sp_counted_impl_pd    :  public sp_counted_base   ,  A::template rebind< sp_counted_impl_pd<A, D> >::other   ,  D  // copy constructor must not throw{   private:   typedef sp_counted_impl_pd<A, D>          this_type;   typedef typename A::template rebind      <this_type>::other                     this_allocator;   typedef typename A::template rebind      <const this_type>::other               const_this_allocator;   typedef typename this_allocator::pointer  this_pointer;   sp_counted_impl_pd( sp_counted_impl_pd const & );   sp_counted_impl_pd & operator= ( sp_counted_impl_pd const & );   typedef typename detail::pointer_to_other            <typename A::pointer, const D>::type   const_deleter_pointer;   typedef typename detail::pointer_to_other            <typename A::pointer, const A>::type   const_allocator_pointer;   typedef typename D::pointer   pointer;   pointer m_ptr;   public:   // pre: d(p) must not throw   template<class Ptr>   sp_counted_impl_pd(const Ptr & p, const A &a, const D &d )      :  this_allocator(a), D(d), m_ptr(p)   {}   const_deleter_pointer get_deleter() const   {  return const_deleter_pointer(&static_cast<const D&>(*this)); }   const_allocator_pointer get_allocator() const   {  return const_allocator_pointer(&static_cast<const A&>(*this)); }   void dispose() // nothrow      {  static_cast<D&>(*this)(m_ptr); }   void destroy() // nothrow   {      //Self destruction, so get a copy of the allocator      //(in the future we could move it)      this_allocator a_copy(*this);      BOOST_ASSERT(a_copy == *this);      this_pointer this_ptr (this);      //Do it now!      scoped_ptr<this_type,                  scoped_ptr_dealloc_functor<this_allocator> >(this_ptr, a_copy);      typedef typename this_allocator::value_type value_type;      detail::get_pointer(this_ptr)->~value_type();   }   void release() // nothrow   {      if(this->ref_release()){         this->dispose();         this->weak_release();      }   }   void weak_release() // nothrow   {      if(sp_counted_base::weak_release()){         this->destroy();      }   }};} // namespace detail} // namespace interprocess} // namespace boost#include <boost/interprocess/detail/config_end.hpp>#endif  // #ifndef BOOST_INTERPROCESS_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?