📄 auto_space.hpp
字号:
/* Copyright 2003-2004 Joaqu韓 M L髉ez Mu駉z. * 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) * * See http://www.boost.org/libs/multi_index for library home page. */#ifndef BOOST_MULTI_INDEX_DETAIL_AUTO_SPACE_HPP#define BOOST_MULTI_INDEX_DETAIL_AUTO_SPACE_HPP#include <boost/detail/allocator_utilities.hpp>#include <boost/noncopyable.hpp>#include <memory>namespace boost{namespace multi_index{namespace detail{/* auto_space provides uninitialized space suitably to store * a given number of elements of a given type. *//* NB: it is not clear whether using an allocator to handle * zero-sized arrays of elements is conformant or not. GCC 3.3.1 * and prior fail here, other stdlibs handle the issue gracefully. * To be on the safe side, the case n==0 is given special treatment. * References: * GCC Bugzilla, "standard allocator crashes when deallocating segment * "of zero length", http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14176 * C++ Standard Library Defect Report List (Revision 28), issue 199 * "What does allocate(0) return?", * http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html#199 */template<typename T,typename Allocator=std::allocator<T> >struct auto_space:private noncopyable{ explicit auto_space(const Allocator& al=Allocator(),std::size_t n=1): al_(al),n_(n),data_(n_?al_.allocate(n_):0) {} ~auto_space() { if(n_)al_.deallocate(data_,n_); } T* data()const{return data_;} private: typename boost::detail::allocator::rebind_to< Allocator,T>::type al_; std::size_t n_; T* data_;};} /* namespace multi_index::detail */} /* namespace multi_index */} /* namespace boost */#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -