123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- [/
- Copyright 2019 Glen Joseph Fernandes
- (glenjofe@gmail.com)
- Distributed under the Boost Software License, Version 1.0.
- (http://www.boost.org/LICENSE_1_0.txt)
- ]
- [section:default_allocator default_allocator]
- [simplesect Authors]
- * Glen Fernandes
- [endsimplesect]
- [section Overview]
- The header <boost/core/default_allocator.hpp> provides the class template
- `boost::default_allocator` to serve as a minimal default allocator that:
- * Like C++2a's `std::allocator`, does not provide members such as `construct()`
- and `destroy()` to be eligible for optimizations by allocator-aware code that
- detects the absence of these members to provide more optimal construction.
- * Supports `BOOST_NO_EXCEPTIONS` in allocation.
- * Does not have `std` as an associated namespace.
- [endsect]
- [section Examples]
- The following snippet shows the use of this allocator as the default allocator
- for a container.
- ```
- template<class Key, class Compare = std::less<Key>,
- class Allocator = boost::default_allocator<Key> >
- class FlatSet;
- ```
- Facilities like `make_shared` can be implemented using `allocate_shared` with
- `default_allocator`.
- ```
- template<class T, class... Args>
- enable_if_t<!is_array_v<T>, shared_ptr<T> >
- make_shared(Args&&... args)
- {
- return allocate_shared<T>(boost::default_allocator<remove_cv_t<T> >(),
- std::forward<Args>(args)...);
- }
- ```
- [endsect]
- [section Reference]
- ```
- namespace boost {
- template<class T>
- struct default_allocator {
- typedef T value_type;
- typedef T* pointer;
- typedef const T* const_pointer;
- typedef std::add_lvalue_reference_t<T> reference;
- typedef std::add_lvalue_reference_t<const T> const_reference;
- typedef std::size_t size_type;
- typedef std::ptrdiff_t difference_type;
- typedef ``['true_type]`` propagate_on_container_move_assignment;
- typedef ``['true_type]`` is_always_equal;
- template<class U>
- struct rebind {
- typedef default_allocator<U> other;
- };
- constexpr default_allocator() = default;
- template<class U>
- constexpr default_allocator(const default_allocator<U>&) noexcept { }
- constexpr std::size_t max_size() const noexcept;
- T* allocate(std::size_t n);
- void deallocate(T* p, std::size_t);
- };
- template<class T, class U>
- constexpr bool operator==(const default_allocator<T>&,
- const default_allocator<U>&) noexcept;
- template<class T, class U>
- constexpr bool operator!=(const default_allocator<T>&,
- const default_allocator<U>&) noexcept;
- } /* boost */
- ```
- [section Members]
- [variablelist
- [[`constexpr std::size_t max_size() const noexcept;`]
- [[variablelist
- [[Returns][The largest value `N` for which the call `allocate(N)` might
- succeed.]]]]]
- [[`T* allocate(std::size_t n);`]
- [[variablelist
- [[Returns]
- [A pointer to the initial element of an array of storage of size
- `n * sizeof(T)`, aligned appropriately for objects of type `T`.]]
- [[Remarks][The storage is obtained by calling `::operator new`.]]
- [[Throws][`std::bad_alloc` if the storage cannot be obtained.]]]]]
- [[`void deallocate(T* p, std::size_t n);`]
- [[variablelist
- [[Requires]
- [`p` shall be a pointer value obtained from `allocate()`. `n` shall equal the
- value passed as the first argument to the invocation of `allocate` which
- returned `p`.]]
- [[Effects][Deallocates the storage referenced by `p`.]]
- [[Remarks][Uses `::operator delete`.]]]]]]
- [endsect]
- [section Operators]
- [variablelist
- [[`template<class T, class U> constexpr bool operator==(const
- default_allocator<T>&, const default_allocator<U>&) noexcept;`]
- [[variablelist
- [[Returns][`true`.]]]]]
- [[`template<class T, class U> constexpr bool operator!=(const
- default_allocator<T>&, const default_allocator<U>&) noexcept;`]
- [[variablelist
- [[Returns][`false`.]]]]]]
- [endsect]
- [endsect]
- [endsect]
|