YSTest: memory.hpp 文件参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

类 | 命名空间 | 类型定义 | 函数
memory.hpp 文件参考
YBaseLib » YStandardExtend

存储和智能指针特性。 更多...

`#include "allocator.hpp"`
`#include <limits>`
`#include "ref.hpp"`
memory.hpp 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

## 类

struct | ystdex::is_sharing< _type >
| 判断指定类型是否为已知的持有共享所有权的对象类型。 更多...
struct | ystdex::is_sharing< std::shared_ptr< _type > >
struct | ystdex::is_sharing< std::weak_ptr< _type > >
struct | ystdex::free_delete< _type >
| 使用显式析构函数调用和 std::free 的删除器。 更多...
struct | ystdex::free_delete< _type[]>
struct | ystdex::temporary_buffer_delete< typename >
| 使用显式 ystdex::return_temporary_buffer 调用释放存储的删除器。 更多...
struct | ystdex::temporary_buffer_delete< _type[]>
class | ystdex::temporary_buffer< _type >
| 临时缓冲区。 更多...
struct | ystdex::details::pack_obj_impl< _type >
struct | ystdex::details::pack_obj_impl< std::unique_ptr< _type, _tDeleter > >
struct | ystdex::details::pack_obj_impl< std::shared_ptr< _type > >
struct | ystdex::object_pack< _type, _tPack >
| 打包的对象：使用 pack_object 得到的对象包装。 更多...

## 命名空间

| ystdex
| `<memory>` 特性测试宏。
| ystdex::details
| ystdex::cpp2014
| 使用 new 和指定参数构造指定类型的 std::unique_ptr 对象。

## 类型定义

template<typename _type >
using | ystdex::details::over_aligned_t = false_
template<class _tDeleter >
using | ystdex::deleter_member_pointer_t = typename remove_reference_t< _tDeleter >::pointer
| 取删除器的 `pointer` 成员类型。 更多...
template<typename _type , class _tDeleter >
using | ystdex::unique_ptr_pointer = detected_or_t< _type *, deleter_member_pointer_t, _tDeleter >
| 取 unique_ptr 包装的指针类型。 更多...
template<typename _tPointer , typename _tDefault = void>
using | ystdex::defer_element = cond_or< not_< is_void< remove_pointer_t< _tPointer > >>, _tDefault, indirect_element_t, _tPointer >
| 取指针对应的元素类型。 更多...

## 函数

template<typename _type , typename... _tParams>
_type | ystdex::details::create_or_throw_impl (void *, _tParams &&...)
template<typename _type , typename... _tParams>
auto | ystdex::details::create_or_throw_impl (nullptr_t, _tParams &&... args) -> decltype(_type(std::forward< decltype(args)>(args)...))
template<typename _type , class _tAlloc , typename... _tParams>
_type * | ystdex::details::create_or_throw_with_allocator_impl (void *, _tAlloc &, _tParams &&...)
template<typename _type , class _tAlloc , typename... _tParams>
auto | ystdex::details::create_or_throw_with_allocator_impl (nullptr_t, _tAlloc &a, _tParams &&... args) -> decltype(ystdex::create_with_allocator< _type >(a, std::forward< decltype(args)>(args)...))
template<typename _type , typename... _tParams>
_type * | ystdex::details::new_or_throw_impl (void *, _tParams &&...)
template<typename _type , typename... _tParams>
auto | ystdex::details::new_or_throw_impl (nullptr_t, _tParams &&... args) -> decltype(new _type(std::forward< decltype(args)>(args)...))
template<typename _type , typename... _tParams>
_type | ystdex::create_or_throw (_tParams &&... args)
| 调用构造函数创建对象或抛出异常。 更多...
template<typename _type , class _tAlloc , typename... _tParams>
_type * | ystdex::create_or_throw_with_allocator (_tAlloc &&a, _tParams &&... args)
| 调用 ystdex::create_with_allocator 表达式创建对象或抛出异常。 更多...
template<typename _type , typename... _tParams>
_type * | ystdex::new_or_throw (_tParams &&... args)
| 调用 new 表达式创建对象或抛出异常。 更多...
void * | ystdex::details::new_aligned (size_t size, size_t, false_)
void | ystdex::details::delete_aligned (void *ptr, size_t, false_)
template<typename _type , typename _fDeleter >
bool | ystdex::is_undereferenceable (const std::unique_ptr< _type, _fDeleter > &p)
| 判断智能指针实例是否不可解引用。 更多...
template<typename _type >
bool | ystdex::is_undereferenceable (const std::shared_ptr< _type > &p)
template<typename _type >
bool | ystdex::is_undereferenceable (const std::weak_ptr< _type > &p)
template<typename _type >
_type * | ystdex::get_raw (_type *const &p)
template<typename _type , typename _fDeleter >
auto | ystdex::get_raw (const std::unique_ptr< _type, _fDeleter > &p) -> decltype(p.get())
template<typename _type >
_type * | ystdex::get_raw (const std::shared_ptr< _type > &p)
template<typename _type >
_type * | ystdex::get_raw (const std::weak_ptr< _type > &p)
template<typename _type >
bool | ystdex::owns_any (_type *const &)
template<typename _type , typename _fDeleter >
bool | ystdex::owns_any (const std::unique_ptr< _type, _fDeleter > &p)
template<typename _type >
bool | ystdex::owns_any (const std::shared_ptr< _type > &p)
template<typename _type >
bool | ystdex::owns_any (const std::weak_ptr< _type > &p)
template<typename _type >
bool | ystdex::owns_nonnull (_type *const &)
template<typename _type , typename _fDeleter >
bool | ystdex::owns_nonnull (const std::unique_ptr< _type, _fDeleter > &p)
template<typename _type >
bool | ystdex::owns_nonnull (const std::shared_ptr< _type > &p)
template<typename _type >
bool | ystdex::owns_nonnull (const std::weak_ptr< _type > &p)
template<typename _type >
bool | ystdex::owns_unique (const _type &)
template<typename _type , class _tDeleter >
bool | ystdex::owns_unique (const std::unique_ptr< _type, _tDeleter > &p)
template<typename _type >
bool | ystdex::owns_unique (const std::shared_ptr< _type > &p)
template<typename _type >
bool | ystdex::owns_unique (const std::weak_ptr< _type > &p)
template<typename _type >
bool | ystdex::owns_unique_nonnull (const _type &)
template<typename _type , class _tDeleter >
bool | ystdex::owns_unique_nonnull (const std::unique_ptr< _type, _tDeleter > &p)
template<typename _type >
bool | ystdex::owns_unique_nonnull (const std::shared_ptr< _type > &p)
template<typename _type >
bool | ystdex::owns_unique_nonnull (const std::weak_ptr< _type > &p)
template<typename _type , class _tDeleter >
bool | ystdex::reset (std::unique_ptr< _type, _tDeleter > &p)
template<typename _type >
bool | ystdex::reset (std::shared_ptr< _type > &p)
template<typename _type , typename _pSrc >
std::unique_ptr< _type > | ystdex::unique_raw (_pSrc *p)
template<typename _type >
std::unique_ptr< _type > | ystdex::unique_raw (_type *p)
template<typename _type , typename _tDeleter , typename _pSrc >
std::unique_ptr< _type, _tDeleter > | ystdex::unique_raw (_pSrc *p, _tDeleter &&d)
template<typename _type , typename _tDeleter >
std::unique_ptr< _type, _tDeleter > | ystdex::unique_raw (_type *p, _tDeleter &&d)
template<typename _type >
std::unique_ptr< _type > | ystdex::unique_raw (nullptr_t)
template<typename _type , typename... _tParams>
std::shared_ptr< _type > | ystdex::share_raw (_type *p, _tParams &&... args)
template<typename _type , typename _pSrc , typename... _tParams>
std::shared_ptr< _type > | ystdex::share_raw (_pSrc &&p, _tParams &&... args)
template<typename _type >
std::shared_ptr< _type > | ystdex::share_raw (nullptr_t)
template<typename _type , class... _tParams>
enable_if_t< sizeof...(_tParams) !=0, std::shared_ptr< _type > > | ystdex::share_raw (nullptr_t, _tParams &&... args)
template<typename _type , typename... _tParams>
enable_if_t<!is_array< _type >::value, std::unique_ptr< _type > > | ystdex::cpp2014::make_unique (_tParams &&... args)
template<typename _type , typename... _tParams>
enable_if_t< is_array< _type >::value &&extent< _type >::value==0, std::unique_ptr< _type > > | ystdex::cpp2014::make_unique (size_t size)
template<typename _type , typename... _tParams>
enable_if_t< extent< _type >::value !=0 > | ystdex::cpp2014::make_unique (_tParams &&...)=delete
template<typename _type , typename... _tParams>
enable_if_t<!is_array< _type >::value, std::unique_ptr< _type > > | ystdex::make_unique_default_init ()
template<typename _type , typename... _tParams>
enable_if_t< is_array< _type >::value &&extent< _type >::value==0, std::unique_ptr< _type > > | ystdex::make_unique_default_init (size_t size)
template<typename _type , typename... _tParams>
enable_if_t< extent< _type >::value !=0 > | ystdex::make_unique_default_init (_tParams &&...)=delete
template<typename _type , typename _tElem >
std::unique_ptr< _type > | ystdex::make_unique (std::initializer_list< _tElem > il)
| 使用指定类型的初始化列表构造指定类型的 std::unique_ptr 对象。 更多...
template<typename _type , typename _tDeleter , typename... _tParams>
enable_if_t<!is_array< _type >::value, std::unique_ptr< _type, _tDeleter > > | ystdex::make_unique_with (_tDeleter &&d, _tParams &&... args)
template<typename _type , typename _tDeleter , typename... _tParams>
enable_if_t< is_array< _type >) &&extent< _type >)==0, std::unique_ptr< _type > > | ystdex::make_unique_with (_tDeleter &&d, size_t size)
template<typename _type , typename _tDeleter , typename... _tParams>
enable_if_t< is_array< _type >) &&extent< _type >) !=0 > | ystdex::make_unique_with (_tDeleter &&, _tParams &&...)=delete
template<typename _type , typename _tValue >
std::shared_ptr< _type > | ystdex::make_shared (std::initializer_list< _tValue > il)
| 使用指定类型的初始化列表构造指定类型的 std::shared_ptr 对象。 更多...
template<typename _type >
std::weak_ptr< _type > | ystdex::make_weak (const std::shared_ptr< _type > &p)
| 使用指定的 std::shared_ptr 实例的对象创建对应的 std::weak_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_copy (const _tValue &v)
| 复制值创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_copy (std::initializer_list< _tValue > il)
| 复制初始化列表创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_copy (const _tAlloc &a, const _tValue &v)
| 复制初始化值以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_copy (const _tAlloc &a, std::initializer_list< _tValue > il)
| 复制初始化列表以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_forward (_tValue &&v)
| 传递值创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_forward (std::initializer_list< _tValue > il)
| 传递初始化列表创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_forward (const _tAlloc &a, _tValue &&v)
| 传递值以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_forward (const _tAlloc &a, std::initializer_list< _tValue > il)
| 传递初始化列表以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_move (_tValue &&v)
| 转移值创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_move (std::initializer_list< _tValue > il)
| 转移初始化列表创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_move (const _tAlloc &a, _tValue &&v)
| 转移值以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | ystdex::share_move (const _tAlloc &a, std::initializer_list< _tValue > il)
| 转移初始化列表以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_copy (const _tValue &v)
| 复制值创建对应的 std::unique_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_copy (std::initializer_list< _tValue > il)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_copy (const _tAlloc &a, const _tValue &v)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_copy (const _tAlloc &a, std::initializer_list< _tValue > il)
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_forward (_tValue &&v)
| 传递值创建对应的 std::unique_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_forward (std::initializer_list< _tValue > il)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_forward (const _tAlloc &a, _tValue &&v)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_forward (const _tAlloc &a, std::initializer_list< _tValue > il)
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_move (_tValue &&v)
| 转移值创建对应的 std::unique_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_move (std::initializer_list< _tValue > il)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_move (const _tAlloc &a, _tValue &&v)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | ystdex::unique_move (const _tAlloc &a, std::initializer_list< _tValue > il)
template<typename _tDst , typename _type >
std::unique_ptr< _tDst > | ystdex::static_pointer_cast (std::unique_ptr< _type > p)
| 智能指针转换。 更多...
template<typename _tDst , typename _type , typename _tDeleter >
std::unique_ptr< _tDst, _tDeleter > | ystdex::static_pointer_cast (std::unique_ptr< _type, _tDeleter > p)
template<typename _tDst , typename _type >
std::unique_ptr< _tDst > | ystdex::dynamic_pointer_cast (std::unique_ptr< _type > &p)
template<typename _tDst , typename _type >
std::unique_ptr< _tDst > | ystdex::dynamic_pointer_cast (std::unique_ptr< _type > &&p)
template<typename _tDst , typename _type , typename _tDeleter >
std::unique_ptr< _tDst, _tDeleter > | ystdex::dynamic_pointer_cast (std::unique_ptr< _type, _tDeleter > &p)
template<typename _tDst , typename _type , typename _tDeleter >
std::unique_ptr< _tDst, _tDeleter > | ystdex::dynamic_pointer_cast (std::unique_ptr< _type, _tDeleter > &&p)
template<typename _tDst , typename _type >
std::unique_ptr< _tDst > | ystdex::const_pointer_cast (std::unique_ptr< _type > p)
template<typename _tDst , typename _type , typename _tDeleter >
std::unique_ptr< _tDst, _tDeleter > | ystdex::const_pointer_cast (std::unique_ptr< _type, _tDeleter > p)
template<typename _type >
_type * | ystdex::clone_monomorphic (const _type &v)
| 使用 new 复制对象。 更多...
template<typename _type , class _tAlloc >
auto | ystdex::clone_monomorphic (const _type &v, _tAlloc &&a) -> decltype(ystdex::create_with_allocator< _type >(std::forward< decltype(a)>(a), v))
| 使用分配器复制对象。 更多...
template<typename _tPointer >
auto | ystdex::clone_monomorphic_ptr (const _tPointer &p) -> decltype(ystdex::clone_monomorphic(*p))
| 若指针非空，使用 new 复制指针指向的对象。 更多...
template<typename _tPointer , class _tAlloc >
auto | ystdex::clone_monomorphic_ptr (const _tPointer &p, _tAlloc &&a) -> decltype(ystdex::clone_monomorphic(*p, std::forward< decltype(a)>(a)))
| 若指针非空，使用分配器复制指针指向的对象。 更多...
template<class _type >
auto | ystdex::clone_polymorphic (const _type &v) -> decltype(v.clone())
| 使用 `clone` 成员函数复制多态类类型对象。 更多...
template<class _tPointer >
auto | ystdex::clone_polymorphic_ptr (const _tPointer &p) -> decltype(clone_polymorphic(*p))
| 若指针非空，使用 `clone` 成员函数复制指针指向的多态类类型对象。 更多...
template<typename _type , typename... _tParams>
auto | ystdex::pack_object (_tParams &&... args) -> decltype(details::pack_obj_impl< _type >::pack(std::forward< decltype(args)>(args)...))
| 打包对象：通过指定参数构造对象。 更多...

## 详细描述

存储和智能指针特性。

版本
  r4930

作者
  FrankHB frank.nosp@m.hb19.nosp@m.89@gm.nosp@m.ail..nosp@m.com

自从
  build 209

创建时间:
  2011-05-14 12:25:13 +0800

修改时间:
  2020-07-17 01:25 +0800

文本编码:
  UTF-8

模块名称:
  YStandardEx::Memory

扩展标准库头 `<memory>` ，提供对智能指针类型的操作及判断迭代器不可解引用的模板。

在文件 memory.hpp 中定义.