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/cpp/memory/unique_ptr/~unique_ptr