20 General utilities library [utilities]

20.7 Smart pointers [smartptr]

20.7.1 Class template unique_ptr [unique.ptr]

20.7.1.1 Default deleters [unique.ptr.dltr]

20.7.1.1.1 In general [unique.ptr.dltr.general]

The class template default_delete serves as the default deleter (destruction policy) for the class template unique_ptr.

The template parameter T of default_delete may be an incomplete type.

20.7.1.1.2 default_delete [unique.ptr.dltr.dflt]

namespace std {
  template <class T> struct default_delete {
    constexpr default_delete() noexcept = default;
    template <class U> default_delete(const default_delete<U>&) noexcept;
    void operator()(T*) const;
  };
}

template <class U> default_delete(const default_delete<U>& other) noexcept;

Effects: Constructs a default_delete object from another default_delete<U> object.

Remarks: This constructor shall not participate in overload resolution unless U* is implicitly convertible to T*.

void operator()(T *ptr) const;

Effects: calls delete on ptr.

Remarks: If T is an incomplete type, the program is ill-formed.

20.7.1.1.3 default_delete<T[]> [unique.ptr.dltr.dflt1]

namespace std {
  template <class T> struct default_delete<T[]> {
    constexpr default_delete() noexcept = default;
    void operator()(T*) const;
    template <class U> void operator()(U*) const = delete;
  };
}

void operator()(T* ptr) const;

Effects: calls delete[] on ptr.

Remarks: If T is an incomplete type, the program is ill-formed.