Сброс указателя reset в C++
Метод reset у std::unique_ptr
удаляет текущий объект и может привязать новый.
Вызов без аргумента освобождает память и делает указатель пустым. Так явно завершают владение раньше конца области видимости. Запишем класс с сообщением в деструкторе и сбросим указатель до выхода из блока:
#include <iostream>
#include <memory>
class Beacon {
public:
~Beacon() {
std::cout << "beacon off\n";
}
};
int main() {
std::unique_ptr<Beacon> lamp =
std::make_unique<Beacon>();
lamp.reset();
std::cout << "after reset\n";
return 0;
}
Сделайте класс Flag, печатающий
down в деструкторе. Держите его
в unique_ptr, вызовите reset
и убедитесь, что down появляется
до конца main.