1#ifndef MSTL_CORE_MEMORY_ALLOCATED_PTR_HPP__
2#define MSTL_CORE_MEMORY_ALLOCATED_PTR_HPP__
27template <
typename Alloc>
29 using pointer =
typename allocator_traits<Alloc>::pointer;
30 using value_type =
typename allocator_traits<Alloc>::value_type;
56 template <
typename Ptr,
typename = enable_if_t<is_same_v<Ptr, value_type*>>>
65 : alloc_(guard.alloc_), ptr_(guard.ptr_) {
73 if (ptr_ !=
nullptr) {
109template <
typename Alloc>
allocated_ptr< Alloc > allocate_guarded(Alloc &alloc)
分配内存并创建allocated_ptr
MSTL_NODISCARD constexpr T * addressof(T &x) noexcept
获取对象的地址
decltype(nullptr) nullptr_t
空指针类型
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr T * to_address(T *ptr) noexcept
安全地获取原始指针指向的地址
allocated_ptr(allocated_ptr &&guard) noexcept
移动构造函数
typename allocator_traits< Alloc >::value_type value_type
元素类型
allocated_ptr(Alloc &alloc, Ptr ptr)
原始指针转换
typename allocator_traits< Alloc >::pointer pointer
分配器指针类型
allocated_ptr(Alloc &alloc, pointer ptr) noexcept
构造函数
allocated_ptr & operator=(nullptr_t null) noexcept
设置为空指针
static MSTL_NODISCARD MSTL_CONSTEXPR20 pointer allocate(Alloc &alloc, size_type n)
分配内存
static MSTL_CONSTEXPR20 void deallocate(Alloc &alloc, pointer ptr, size_type n)
释放内存