std::unique_ptr::get_deleter
Материал из cppreference.com
<tbody>
</tbody>
Deleter& get_deleter() noexcept; |
(начиная с C++11) (constexpr начиная с C++23) |
|
const Deleter& get_deleter() const noexcept; |
(начиная с C++11) (constexpr начиная с C++23) |
|
Возвращает объект удаления, который будет использоваться для уничтожения управляемого объекта.
Параметры
(нет)
Возвращаемое значение
Сохранённый объект удаления.
Пример
Запустить этот код
#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 << "вызов D::bar(), мой номер: " << std::dec
<< number << '\n'; }
void operator()(Foo* p) const
{
std::cout << "вызов средства удаления для объекта Foo 0x" << std::hex
<< (void*)p << '\n';
delete p;
}
};
int main()
{
std::cout << "main начала выполнение\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 закончила выполнение\n";
}
Вывод:
main начала выполнение
Foo() 0x0x90cc30
вызов D::bar(), мой номер: 42
Foo() 0x0x90cc50
вызов средства удаления для объекта Foo 0x0x90cc50
~Foo() 0x0x90cc50
main закончила выполнение
вызов средства удаления для объекта Foo 0x0x90cc30
~Foo() 0x0x90cc30
Смотрите также
| возвращает средство удаления указанного типа, если владеет (шаблон функции) |