Spec-Zone.ru › C++

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API