ranges_destroy

ranges_destroy (ranges::destroy)

<memory> 헤더에 정의되어 있어요. 대상 범위의 요소들을 파괴해요. std::destroy의 ranges 버전(니블로이드, niebloid)이에요. C++20부터 도입됐어요.

출처: cppreference

본문

호출 시그니처:

template< /*nothrow-input-iterator*/ I, /*nothrow-sentinel-for*/<I> S >
    requires std::destructible<std::iter_value_t<I>>
constexpr I destroy( I first, S last ) noexcept;   // (1) since C++20

template< /*nothrow-input-range*/ R >
    requires std::destructible<ranges::range_value_t<R>>
constexpr ranges::borrowed_iterator_t<R> destroy( R&& r ) noexcept;   // (2) since C++20

template< /*execution-policy*/ Ep, /*nothrow-random-access-iterator*/ I,
          /*nothrow-sentinel-for*/<I> S >
I destroy( Ep&& policy, I first, S last );          // (3) since C++26

template< /*execution-policy*/ Ep, /*nothrow-random-access-range*/ R >
ranges::borrowed_iterator_t<R> destroy( Ep&& policy, R&& r );   // (4) since C++26
  • (1) [first, last) 범위의 요소들을 std::destroy_at으로 파괴하고 마지막 요소 다음의 반복자를 돌려줘요.
  • (2) 범위 r에 대해 (1)과 같고, ranges::begin(r)/ranges::end(r)을 사용해요.
  • (3)(4) 실행 정책 policy에 따라 병렬로 실행될 수 있어요. (C++26)

반환값

파괴한 마지막 요소 다음의 반복자.

T* buf = ...;
for (int i = 0; i < 10; ++i) ::new (buf + i) T;
std::ranges::destroy(buf, buf + 10);   // 10개 소멸자 호출

더 알아보기 (Learn more)

cppreference