Scroll to navigation

std::unique_ptr::get_deleter(3) C++ Standard Libary std::unique_ptr::get_deleter(3)

NAME

std::unique_ptr::get_deleter - std::unique_ptr::get_deleter

Synopsis


Deleter& get_deleter() noexcept; (since C++11)
(constexpr since C++23)
const Deleter& get_deleter() const noexcept; (since C++11)
(constexpr since C++23)


Returns the deleter object which would be used for destruction of the managed
object.

Parameters


(none)

Return value


The stored deleter object.

Example

// Run this code


#include <iostream>
#include <memory>


struct Foo
{
Foo() { std::cout << "Foo() 0x" << std::hex << (void*)this << '\n'; }
~Foo() { std::cout << "~Foo() 0x" << std::hex << (void*)this << '\n'; }
};


struct D
{
int number;


void bar()
{
std::cout << "call D::bar(), my number is: " << std::dec << number << '\n';
}


void operator()(Foo* p) const
{
std::cout << "call deleter for Foo object 0x" << std::hex << (void*)p << '\n';
delete p;
}
};


int main()
{
std::cout << "main start\n";


std::unique_ptr<Foo, D> up1(new Foo(), D(42));
D& del1 = up1.get_deleter();
del1.bar();


std::unique_ptr<Foo, D> up2(new Foo(), D(43));
D& del2 = up2.get_deleter();
auto* released = up2.release();
del2(released);


std::cout << "main end\n";
}

Output:


main start
Foo() 0x0x90cc30
call D::bar(), my number is: 42
Foo() 0x0x90cc50
call deleter for Foo object 0x0x90cc50
~Foo() 0x0x90cc50
main end
call deleter for Foo object 0x0x90cc30
~Foo() 0x0x90cc30

See also


get_deleter returns the deleter of specified type, if owned
(function template)

2024.06.10 http://cppreference.com