| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | //// detail/null_global.hpp// ~~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// 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)//#ifndef BOOST_ASIO_DETAIL_NULL_GLOBAL_HPP#define BOOST_ASIO_DETAIL_NULL_GLOBAL_HPP#if defined(_MSC_VER) && (_MSC_VER >= 1200)# pragma once#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)#include <boost/asio/detail/config.hpp>#include <boost/asio/detail/push_options.hpp>namespace boost {namespace asio {namespace detail {template <typename T>struct null_global_impl{  null_global_impl()    : ptr_(0)  {  }  // Destructor automatically cleans up the global.  ~null_global_impl()  {    delete ptr_;  }  static null_global_impl instance_;  T* ptr_;};template <typename T>null_global_impl<T> null_global_impl<T>::instance_;template <typename T>T& null_global(){  if (null_global_impl<T>::instance_.ptr_ == 0)    null_global_impl<T>::instance_.ptr_ = new T;  return *null_global_impl<T>::instance_.ptr_;}} // namespace detail} // namespace asio} // namespace boost#include <boost/asio/detail/pop_options.hpp>#endif // BOOST_ASIO_DETAIL_NULL_GLOBAL_HPP
 |