#include <iostream>
#include <memory>
#include <string>
#include <vector>

struct Connection {
    explicit Connection(int id) : id(id) { std::cout << "Connection " << id << " created" << std::endl; }
    ~Connection() { std::cout << "Connection " << id << " destroyed" << std::endl; }
    int id;
};

int main() {
    {
        std::unique_ptr<Connection> a = std::make_unique<Connection>(1);
        std::cout << "a->id = " << a->id << std::endl;
        // std::unique_ptr<Connection> b = a;          // 编译错误：unique_ptr 不能拷贝
        std::unique_ptr<Connection> b = std::move(a);   // 可以移动：所有权从 a 转给 b
        std::cout << "a is " << (a ? "not null" : "null") << ", b->id = " << b->id << std::endl;
    }  // b 离开作用域，Connection 1 被自动 delete
    std::cout << "--- vector of unique_ptr ---" << std::endl;
    std::vector<std::unique_ptr<Connection>> conns;
    conns.push_back(std::make_unique<Connection>(2));
    conns.push_back(std::make_unique<Connection>(3));
    conns.erase(conns.begin());  // 从容器里删掉，就自动销毁
    std::cout << "conns.size() = " << conns.size() << std::endl;
    std::cout << "--- end of main ---" << std::endl;
    return 0;
}
