Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ranges::destroy

      From cppreference.com
      <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>
      Call signature
      template<no-throw-input-iterator I, no-throw-sentinel-for<I> S>

          requiresstd::destructible<std::iter_value_t<I>>

      constexpr I destroy( I first, S last)noexcept;
      (1)(since C++20)
      template<no-throw-input-range R>

          requiresstd::destructible<ranges::range_value_t<R>>

      constexprranges::borrowed_iterator_t<R> destroy( R&& r)noexcept;
      (2)(since C++20)
      1) Destroys the objects in the range[firstlast), as if by
      for(; first!= last;++first)    std::ranges::destroy_at(std::addressof(*first));return first;
      2) Same as(1), but usesr as the source range, as if usingranges::begin(r) asfirst andranges::end(r) aslast.

      The function-like entities described on this page arealgorithm function objects (informally known asniebloids), that is:

      Contents

      [edit]Parameters

      first, last - the iterator-sentinel pair defining therange of elements to destroy
      r - therange to destroy

      [edit]Return value

      An iterator compares equal tolast.

      [edit]Complexity

      Linear in the distance betweenfirst andlast.

      [edit]Possible implementation

      struct destroy_fn{template<no-throw-input-iterator I, no-throw-sentinel-for<I> S>        requiresstd::destructible<std::iter_value_t<I>>constexpr I operator()(I first, S last)constnoexcept{for(; first!= last;++first)            std::ranges::destroy_at(std::addressof(*first));return first;} template<no-throw-input-range R>        requiresstd::destructible<std::ranges::range_value_t<R>>constexpr std::ranges::borrowed_iterator_t<R> operator()(R&& r)constnoexcept{return operator()(std::ranges::begin(r), std::ranges::end(r));}}; inlineconstexpr destroy_fn destroy{};

      [edit]Example

      The following example demonstrates how to useranges::destroy to destroy a contiguous sequence of elements.

      Run this code
      #include <iostream>#include <memory>#include <new> struct Tracer{int value;    ~Tracer(){std::cout<< value<<" destructed\n";}}; int main(){    alignas(Tracer)unsignedchar 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::ranges::destroy(ptr, ptr+8);}

      Output:

      0 destructed1 destructed2 destructed3 destructed4 destructed5 destructed6 destructed7 destructed

      [edit]See also

      destroys a number of objects in a range
      (algorithm function object)[edit]
      destroys an object at a given address
      (algorithm function object)[edit]
      (C++17)
      destroys a range of objects
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/ranges/destroy&oldid=180681"

      [8]ページ先頭

      ©2009-2025 Movatter.jp