ranges_destroy_n

ranges_destroy_n (ranges::destroy_n)

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

출처: cppreference

본문

호출 시그니처:

template< /*nothrow-input-iterator*/ I >
    requires std::destructible<std::iter_value_t<I>>
constexpr I destroy_n( I first, std::iter_difference_t<I> count ) noexcept;   // (1) since C++20

template< /*execution-policy*/ Ep, /*nothrow-random-access-iterator*/ I >
    requires std::destructible<std::iter_value_t<I>>
I destroy_n( Ep&& policy, I first, std::iter_difference_t<I> count );   // (2) since C++26

first부터 시작해 count개의 요소를 파괴하고, 마지막 파괴한 요소 다음의 반복자를 돌려줘요. 각 요소는 std::destroy_at(std::addressof(*first))처럼 파괴돼요.

(2)는 실행 정책 policy에 따라 병렬로 실행될 수 있어요. (C++26)

매개변수

  • first: 파괴할 요소 범위의 시작
  • count: 파괴할 요소 수
  • policy: 사용할 실행 정책

반환값

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

T* buf = ...; int n = 3;
for (int i = 0; i < n; ++i) ::new (buf + i) T;
std::ranges::destroy_n(buf, n);   // 3개 객체 소멸자 호출

더 알아보기 (Learn more)

cppreference