std::experimental::unique_resource
From cppreference.com
Defined in header <experimental/scope>
|
||
template< class R, class D > class unique_resource; |
(library fundamentals TS v3) | |
unique_resource
is universal RAII wrapper for resource handles that owns and manages a resource through a handle and disposes of that resource when the unique_resource
is destroyed.
The resource is disposed of using the deleter of type D
when either of the following happens:
- the managing
unique_resource
object is destroyed, - the managing
unique_resource
object is assigned from another resource via operator= or reset().
Let type RS
be R
if R
is an object type, or std::reference_wrapper<std::remove_reference_t<R>> otherwise:
-
unique_resource
effectively holds a subobject of typeRS
which is or wraps the resource handle, a deleter of typeD
and a bool flag indicating whether the wrapper is owning the resource. - For explanatory purpose, the subobject of type
RS
is called stored resource handle, and the stored (ifR
is an object type) or wrapped (ifR
is a reference type)R
is called underlying resource handle. These two terms are not used by the LFTS.
Contents |
[edit] Template parameters
R | - | resource handle type |
D | - | deleter type |
Type requirements | ||
-R shall be an object type or an lvalue reference to an object type. Let UnrefR be std::remove_reference_t<R>, UnrefR shall be MoveConstructible, and if UnrefR is not CopyConstructible, std::is_nothrow_move_constructible_v<UnrefR> shall be true.
| ||
-D shall be a Destructible and MoveConstructible FunctionObject type, and if D is not CopyConstructible, std::is_nothrow_move_constructible_v<D> shall be true. Given an lvalue d of type D and an lvalue r of type UnrefR , the expression d(r) shall be well-formed.
|
[edit] Member functions
constructs a new unique_resource (public member function) | |
disposes the managed resource if such is present (public member function) | |
assigns a unique_resource (public member function) | |
Modifiers | |
releases the ownership (public member function) | |
disposes or replaces the managed resource (public member function) | |
Observers | |
accesses the underlying resource handle (public member function) | |
accesses the deleter used for disposing of the managed resource (public member function) | |
accesses the pointee if the resource handle is a pointer (public member function) |
[edit] Non-member functions
creates a unique_resource , checking invalid value (function template) |
[edit] Deduction guides
[edit] Notes
Resource handle types satisfying NullablePointer can also be managed by std::unique_ptr. Unlike unique_ptr
, unique_resource
does not require NullablePointer.
[edit] Example
This section is incomplete Reason: no example |
[edit] See also
(C++11) |
smart pointer with unique object ownership semantics (class template) |