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 | typenamestd::allocator_traits<Allocator>::pointer |
const_pointer | typenamestd::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) |