std::indirect
Defined in header <memory> | ||
|---|---|---|
template< class T, class Allocator = std::allocator<T> > class indirect; | (1) | (since C++26) |
namespace pmr {
template< class T >
using indirect = std::indirect<T, std::pmr::polymorphic_allocator<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.
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. |
||
Nested types
| Type | Definition |
|---|---|
value_type |
T |
allocator_type |
Allocator |
pointer | typenamestd::allocator_traits<Allocator>::pointer |
const_pointer | typenamestd::allocator_traits<Allocator>::const_pointer |
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*) |
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) |
|
Non-member functions
|
(C++26)(C++26) | compares indirect objects (function template) |
|
(C++26) | specializes the std::swap algorithm (function template) |
Helper classes
|
(C++26) | hash support for std::indirect (class template specialization) |
Deduction guides
Notes
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_indirect | 202502L | (C++26) |
std::indirect |
Example
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) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/indirect