std::unique_ptr<T,Deleter>::~unique_ptr
~unique_ptr(); | (с C++11) (constexpr с C++23) |
Если get() == nullptr , то никаких эффектов не происходит. В противном случае, владение объекта уничтожается через get_deleter()(get()).
Требует, чтобы get_deleter()(get()) не выбрасывала исключения.
Примечания
Хотя std::unique_ptr<T> с дефолтным удалителем может быть создан с неполным типом T, тип T должен быть полным в момент вызова деструктора.
Пример
Следующая программа демонстрирует использование пользовательского удалителя.
#include <iostream>
#include <memory>
int main ()
{
auto deleter = [](int* ptr)
{
std::cout << "[deleter called]\n";
delete ptr;
};
std::unique_ptr<int, decltype(deleter)> uniq(new int, deleter);
std::cout << (uniq ? "not empty\n" : "empty\n");
uniq.reset();
std::cout << (uniq ? "not empty\n" : "empty\n");
}Вывод:
not empty [deleter called] empty
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/unique_ptr/%7Eunique_ptr