std::indirect

From cppreference.net
< cpp‎ | memory
 
 
Memory management library
(exposition only*)
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
(until C++20*)
(until C++20*)

Garbage collector support (until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
 
 
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.
2) std::pmr::indirect is an alias template that uses a polymorphic allocator.

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 typename std::allocator_traits<Allocator>::pointer
const_pointer typename std::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

compares indirect objects
(function template)
specializes the std::swap algorithm
(function template)

Helper classes

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

a polymorphic wrapper containing dynamically-allocated object with value-like semantics
(class template)
smart pointer with unique object ownership semantics
(class template)