NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
allocated_ptr.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_MEMORY_ALLOCATED_PTR_HPP__
2#define NEFORCE_CORE_MEMORY_ALLOCATED_PTR_HPP__
3
10
12NEFORCE_BEGIN_NAMESPACE__
13
19
27template <typename Alloc>
29 using pointer = typename allocator_traits<Alloc>::pointer;
30 using value_type = typename allocator_traits<Alloc>::value_type;
31
32private:
33 Alloc* alloc_;
34 pointer ptr_;
35
36public:
45 allocated_ptr(Alloc& alloc, pointer ptr) noexcept :
46 alloc_(_NEFORCE addressof(alloc)),
47 ptr_(ptr) {}
48
57 template <typename Ptr, typename = enable_if_t<is_same_v<Ptr, value_type*>>>
58 allocated_ptr(Alloc& alloc, Ptr ptr) :
59 alloc_(_NEFORCE addressof(alloc)),
60 ptr_(pointer_traits<pointer>::pointer_to(*ptr)) {}
61
66 allocated_ptr(allocated_ptr&& guard) noexcept :
67 alloc_(guard.alloc_),
68 ptr_(guard.ptr_) {
69 guard.ptr_ = nullptr;
70 }
71
76 if (ptr_ != nullptr) {
77 _NEFORCE allocator_traits<Alloc>::deallocate(*alloc_, ptr_, 1);
78 }
79 }
80
89 ptr_ = nullptr;
90 return *this;
91 }
92
99 value_type* get() { return _NEFORCE to_address(ptr_); }
100};
101
110template <typename Alloc>
112 return allocated_ptr<Alloc>{alloc, _NEFORCE allocator_traits<Alloc>::allocate(alloc, 1)};
113}
114 // AllocatedPtr
116
117NEFORCE_END_NAMESPACE__
118#endif // NEFORCE_CORE_MEMORY_ALLOCATED_PTR_HPP__
分配器特性
allocated_ptr< Alloc > allocate_guarded(Alloc &alloc)
分配内存并创建allocated_ptr
NEFORCE_NODISCARD constexpr T * addressof(T &x) noexcept
获取对象的地址
decltype(nullptr) nullptr_t
空指针类型
constexpr decltype(auto) to_address(const Ptr &ptr) noexcept
安全地获取任意指针类型指向的地址
分配内存指针
value_type * get()
获取原始指针
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()
析构函数
allocated_ptr & operator=(nullptr_t null) noexcept
设置为空指针
static NEFORCE_NODISCARD NEFORCE_CONSTEXPR20 pointer allocate(Alloc &alloc, size_type n)
分配内存
static NEFORCE_CONSTEXPR20 void deallocate(Alloc &alloc, pointer ptr, size_type n)
释放内存
指针特性主模板