#include <iostream>

class IntOwner {
    int* pointer;
public:
    explicit IntOwner(int initial) : pointer{new int{initial}} {}
    IntOwner(const IntOwner&) = delete;
    IntOwner& operator=(const IntOwner&) = delete;
    ~IntOwner() {
        std::cout << "release " << *pointer << '\n';
        delete pointer;
    }
    int value() const {
        return *pointer;
    }
};

int main() {
    {
        IntOwner owner{9};
        std::cout << "value " << owner.value() << '\n';
        std::cout << "scope end\n";
    }
    std::cout << "after scope\n";
    return 0;
}
