std::destroy_n - cppreference.com (original) (raw)

Defined in header
(1)
template< class ForwardIt, class Size >ForwardIt destroy_n( ForwardIt first, Size n ); (since C++17) (until C++20)
template< class ForwardIt, class Size > constexpr ForwardIt destroy_n( ForwardIt first, Size n ); (since C++20)
template< class ExecutionPolicy, class ForwardIt, class Size >ForwardIt destroy_n( ExecutionPolicy&& policy, ForwardIt first, Size n ); (2) (since C++17)
  1. Destroys the n objects in the range starting at first, as if by

  2. Same as (1), but executed according to policy. This overload participates in overload resolution only if all following conditions are satisfied:

Contents

[edit] Parameters

first - the beginning of the range of elements to destroy
n - the number of elements to destroy
policy - the execution policy to use
Type requirements
-ForwardIt must meet the requirements of LegacyForwardIterator.
-No increment, assignment, comparison, or indirection through valid instances of ForwardIt may throw exceptions.

[edit] Return value

The end of the range of objects that has been destroyed (i.e., std::next(first, n)).

[edit] Complexity

Linear in n.

[edit] Exceptions

The overload with a template parameter named ExecutionPolicy reports errors as follows:

[edit] Possible implementation

template<class ForwardIt, class Size> constexpr // since C++20 ForwardIt destroy_n(ForwardIt first, Size n) { for (; n > 0; (void) ++first, --n) std::destroy_at(std::addressof(*first)); return first; }

[edit] Example

The following example demonstrates how to use destroy_n to destroy a contiguous sequence of elements.

#include #include #include   struct Tracer { int value; ~Tracer() { std::cout << value << " destructed\n"; } };   int main() { alignas(Tracer) unsigned char buffer[sizeof(Tracer) * 8];   for (int i = 0; i != 8; ++i) new(buffer + sizeof(Tracer) * i) Tracer{i}; // manually construct objects   auto ptr = std::launder(reinterpret_cast<Tracer*>(buffer));   std::destroy_n(ptr, 8); }

Output:

0 destructed 1 destructed 2 destructed 3 destructed 4 destructed 5 destructed 6 destructed 7 destructed

[edit] See also