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/w/cpp/memory/unique_ptr/%7Eunique_ptr

Spec-Zone.ru

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