#include <iostream>
#include <memory>
#include <stdexcept>

struct Trace {
    int value;
    explicit Trace(int input) : value{input} {
        std::cout << "create " << value << '\n';
    }
    ~Trace() {
        std::cout << "destroy " << value << '\n';
    }
};

struct Part {
    Part() {
        throw std::runtime_error{"member"};
    }
};

struct Owner {
    std::unique_ptr<Trace> resource;
    Part part;
    Owner() : resource{std::make_unique<Trace>(9)}, part{} {
        std::cout << "ready\n";
    }
    ~Owner() {
        std::cout << "destroy owner\n";
    }
};

int main() {
    try {
        Owner owner;
    } catch (const std::runtime_error& error) {
        std::cout << "caught " << error.what() << '\n';
    }
}
