table of contents
        
      
      
    | std::experimental::unique_resource::unique_resource(3) | C++ Standard Libary | std::experimental::unique_resource::unique_resource(3) | 
NAME¶
std::experimental::unique_resource::unique_resource - std::experimental::unique_resource::unique_resource
Synopsis¶
 unique_resource(); (1) (library fundamentals TS v3)
  
   template< class RR, class DD >
  
   unique_resource( RR&& r, DD&& d ) noexcept(/*see (2)
    (library fundamentals TS v3)
  
   below*/)
  
   unique_resource( unique_resource&& other ); (3) (library
    fundamentals TS v3)
  
   Follow items are used for explanatory purpose:
  
   * RS is the type of stored resource handle.
  
   * The expression res_ refers the underlying resource handle.
  
   * del_ refers the deleter object.
  
   1) Default constructor. Value-initializes the stored resource handle and the
  
   deleter. The constructed unique_resource does not own the resource.
  
   This overload participates in overload resolution only if both
  
   std::is_default_constructible_v<R> and
    std::is_default_constructible_v<D> are true.
  
   2) The stored resource handle is initialized with std::forward<RR>(r)
    if
  
   std::is_nothrow_constructible_v<RS, RR> is true, otherwise r. If
    initialization of
  
   the stored resource handle throws an exception, calls d(r).
  
   Then, the deleter is initialized with std::forward<DD>(d) if
  
   std::is_nothrow_constructible_v<D, DD> is true, otherwise d. If
    initialization of
  
   deleter throws an exception, calls d(res_).
  
   The constructed unique_resource owns the resource.
  
   This overload participates in overload resolution only if all of
  
   std::is_constructible_v<RS, RR>, std::is_constructible_v<D, DD>,
  
   std::is_nothrow_constructible_v<RS, RR> ||
    std::is_constructible_v<RS, RR&> and
  
   std::is_nothrow_constructible_v<D, DD> || std::is_constructible_v<D,
    DD&> are true.
  
   The program is ill-formed if any of the expressions d(r), d(res_) and
    del_(res_) is
  
   ill-formed.
  
   The behavior is undefined if any of the expressions d(r), d(res_) and
    del_(res_)
  
   results in undefined behavior or throws an exception.
  
   3) Move constructor. The stored resource handle is initialized from the one
    of
  
   other, using std::move if std::is_nothrow_move_constructible_v<RS> is
    true. If
  
   initialization of the stored resource handle throws an exception, other is
    not
  
   modified.
  
   Then, the deleter is initialized with the one of other, using std::move if
  
   std::is_nothrow_move_constructible_v<D> is true. If initialization of
    the deleter
  
   throws an exception and std::is_nothrow_move_constructible_v<RS> is
    true and other
  
   owns the resource, calls the deleter of other with res_ to dispose the
    resource,
  
   then calls other.release().
  
   After construction, the constructed unique_resource owns its resource if and
    only if
  
   other owned the resource before the construction, and other is set to not own
    the
  
   resource.
Parameters¶
 r - a resource handle
  
   d - a deleter to use to dispose the resource
  
   other - another unique_resource to acquire the ownership from
Exceptions¶
 Any exception thrown during initialization of the stored resource
    handle or the
  
   deleter.
  
   2)
  
   noexcept specification:
  
   noexcept((
  
   std::is_nothrow_constructible_v<RS, RR> ||
    std::is_nothrow_constructible_v<RS,
  
   RR&>
  
   ) &&
  
   (
  
   std::is_nothrow_constructible_v<D, DD> ||
    std::is_nothrow_constructible_v<D,
  
   DD&>
  
   ))
  
   3)
  
   noexcept specification:
  
   noexcept(
  
   std::is_nothrow_move_constructible_v<R1> &&
  
   std::is_nothrow_move_constructible_v<D>
  
   )
Notes¶
The mechanism of these constructors ensures no leaking of resources.
Example¶
 This section is incomplete
  
   Reason: no example
See also¶
 constructor constructs a new unique_ptr
  
   (public member function of std::unique_ptr<T,Deleter>)
Categories:¶
 * conditionally noexcept
  
   * Todo no example
| 2024.06.10 | http://cppreference.com |