std::indirect
From cppreference.com
| Defined in header <memory>
|
||
| template< class T, class Allocator = std::allocator<T> > class indirect; |
(1) | (since C++26) |
| namespace pmr { template< class T > |
(2) | (since C++26) |
1)
std::indirect is a wrapper containing dynamically-allocated object with value-like semantics.An std::indirect object manages the lifetime of an owned object. An std::indirect object can only have no owned object after it has been moved from, in this case it is valueless .
Every object of type std::indirect<T, Allocator> uses an object of type Allocator to allocate and free storage for the owned object as needed.
If a program declares an explicit or partial specialization of std::indirect, the behavior is undefined.
Contents |
[edit] Template parameters
| T | - | the type of the owned object |
| Allocator | - | the type of the associated allocator |
| Type requirements | ||
-T may be an incomplete type.
| ||
-If T is one of the following types, the program is ill-formed:
| ||
-If Allocator does not satisfy the requirements of Allocator, the program is ill-formed.
| ||
-If std::allocator_traits<Allocator>::value_type is not the same type as T, the program is ill-formed.
| ||
[edit] Nested types
| Type | Definition |
value_type
|
T
|
allocator_type
|
Allocator
|
pointer
|
typename std::allocator_traits<Allocator>::pointer |
const_pointer
|
typename std::allocator_traits<Allocator>::const_pointer |
[edit] Data members
| Member | Description |
pointer p
|
a pointer to the owned value (exposition-only member object*) |
Allocator alloc
|
the asociated allocator (exposition-only member object*) |
[edit] Member functions
constructs the indirect object (public member function) | |
| destroys the owned value, if there is one (public member function) | |
| assigns contents (public member function) | |
Observers | |
| accesses the owned value (public member function) | |
checks if the indirect is valueless (public member function) | |
| returns the associated allocator (public member function) | |
Modifiers | |
| exchanges the contents (public member function) | |
[edit] Non-member functions
| (C++26)(C++26) |
compares indirect objects (function template) |
| (C++26) |
specializes the std::swap algorithm (function template) |
[edit] Helper classes
| (C++26) |
hash support for std::indirect (class template specialization) |
[edit] Deduction guides
[edit] Notes
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_indirect |
202502L |
(C++26) | std::indirect
|
[edit] Example
| This section is incomplete Reason: no example |
[edit] See also
| (C++26) |
a polymorphic wrapper containing dynamically-allocated object with value-like semantics (class template) |
| (C++11) |
smart pointer with unique object ownership semantics (class template) |