unique_ptr — exclusive ownership. shared_ptr — shared ownership.
std::unique_ptr:
1auto ptr1 = std::make_unique<int>(10);2// auto ptr2 = ptr1; // Error! Cannot copy3auto ptr2 = std::move(ptr1); // OK — move
std::shared_ptr:
1auto ptr1 = std::make_shared<int>(10);2auto ptr2 = ptr1; // OK — share ownership3std::cout << ptr1.use_count(); // 2
When to use: