[unique.ptr.dltr.dflt1]

# 20 Memory management library [[mem]](./#mem)

## 20.3 Smart pointers [[smartptr]](smartptr#unique.ptr.dltr.dflt1)

### 20.3.1 Unique-ownership pointers [[unique.ptr]](unique.ptr#dltr.dflt1)

#### 20.3.1.2 Default deleters [[unique.ptr.dltr]](unique.ptr.dltr#dflt1)

#### 20.3.1.2.3 default_delete<T[]> [unique.ptr.dltr.dflt1]

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

[ð](#lib:default_delete,constructor)

`template<class U> constexpr default_delete(const default_delete<U[]>& other) noexcept;
`

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2327)

*Constraints*: U(*)[] is convertible to T(*)[][.](#1.sentence-1)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2331)

*Effects*: Constructs a default_delete object from another default_delete<U[]> object[.](#2.sentence-1)

[ð](#lib:operator(),default_delete)

`template<class U> constexpr void operator()(U* ptr) const;
`

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2342)

*Constraints*: U(*)[] is convertible to T(*)[][.](#3.sentence-1)

[4](#4)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2346)

*Mandates*: U is a complete type[.](#4.sentence-1)

[5](#5)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2350)

*Effects*: Calls delete[] on ptr[.](#5.sentence-1)
