#include #include void printPointers(std::shared_ptr &a, std::shared_ptr &b, std::unique_ptr &c, std::unique_ptr &d) { std::cout << "Shared pointer 1: " << *a << " count " << a.use_count() << std::endl; std::cout << "Shared pointer 2: " << *b << " count " << b.use_count() << std::endl; std::cout << "Unique pointer 3: " << *c << std::endl; std::cout << "Unique pointer 4: " << *d << std::endl; std::cout << std::endl; } int main() { // Shared pointers std::shared_ptr sptr1(new int(1)); auto sptr2 = std::make_shared(2); // Unique pointers std::unique_ptr uptr3(new int(5)); auto uptr4 = std::make_unique(10); printPointers(sptr1, sptr2, uptr3, uptr4); *sptr1 = 3; std::cout << "sptr1 value changed: *sptr1 = 3;" << std::endl; printPointers(sptr1, sptr2, uptr3, uptr4); *uptr3 = 7; std::cout << "uptr1 value changed: *uptr1 = 7;" << std::endl; printPointers(sptr1, sptr2, uptr3, uptr4); sptr2 = sptr1; std::cout << "sptr2=sptr1" << std::endl; printPointers(sptr1, sptr2, uptr3, uptr4); //sptr2 = new int(4); sptr2.reset(new int(4)); std::cout << "sptr2 changed" << std::endl; printPointers(sptr1, sptr2, uptr3, uptr4); //uptr3 = uptr4; uptr3 = std::move(uptr4); std::cout << "sptr3 = std:move(uptr4)" << std::endl; std::cout << "Unique pointer 3: " << *uptr3 << std::endl; return 0; }