#include "shared_ptr.hpp" #include #include #include class MyClass { public: MyClass() = default; MyClass(std::string name) : m_name(name) { } MyClass(std::string name, unsigned int rank) : m_name(name), m_rank(rank) { } MyClass(unsigned int rank, int) : // Not giving the second parameter a name to prevent a compiler warning m_rank(rank) { } void showMessage(std::string msg) { std::cout << msg << std::endl; } std::string m_name = "anonymous"; unsigned int m_rank = 0; }; void demoSharedPointer(); // ------------------------------------------------------------------ // // Shared memory assignment: usu::shared_ptr usu::unique_ptr // // ------------------------------------------------------------------ int main() { demoSharedPointer(); return 0; } void demoSharedPointer() { std::shared_ptr p1 = std::make_shared(); usu::shared_ptr p2 = usu::make_shared(); usu::shared_ptr p2a = usu::make_shared(); std::shared_ptr p3 = std::make_shared(10); usu::shared_ptr p4 = usu::make_shared(10); std::shared_ptr p5 = std::make_shared(); usu::shared_ptr p6 = usu::make_shared(); usu::shared_ptr p6b = usu::make_shared("Hi Mom!"); std::shared_ptr p7 = std::make_shared(); usu::shared_ptr p8 = usu::make_shared(); std::shared_ptr p9 = std::make_shared("Test"); usu::shared_ptr p10 = usu::make_shared("Test"); std::shared_ptr p11 = std::make_shared("Test", 2); usu::shared_ptr p12 = usu::make_shared("Test", 2); std::shared_ptr p13 = std::make_shared(1, 2); usu::shared_ptr p14 = usu::make_shared(1, 2); std::cout << std::endl; std::cout << "--- Reference Counts ---" << std::endl; std::cout << "p13 : " << p13.use_count() << std::endl; std::cout << "P14 : " << p14.use_count() << std::endl; auto p13b = p13; auto p14b = p14; std::cout << "auto p13b = p13" << std::endl; std::cout << "auto p14b = p14" << std::endl; std::cout << "p13 : " << p13.use_count() << std::endl; std::cout << "P14 : " << p14.use_count() << std::endl; p13b = p11; p14b = p12; std::cout << "auto p13b = p11" << std::endl; std::cout << "auto p14b = p12" << std::endl; std::cout << "p11 : " << p11.use_count() << std::endl; std::cout << "P12 : " << p12.use_count() << std::endl; std::cout << "p13b : " << p13b.use_count() << std::endl; std::cout << "P14b : " << p14b.use_count() << std::endl; std::cout << "p13 : " << p13.use_count() << std::endl; std::cout << "P14 : " << p14.use_count() << std::endl; std::cout << std::endl; std::cout << "--- Member Access ---" << std::endl; p13->showMessage("from p13"); p14->showMessage("from p14"); (*p13).showMessage("from (*p13)"); (*p14).showMessage("from (*p14)"); MyClass* x = p13.get(); x->showMessage("from p13.get()"); MyClass* y = p14.get(); y->showMessage("from p14.get()"); usu::shared_ptr a1 = usu::make_shared_array(); for (unsigned int i = 0; i < a1.size(); i++) { a1[i].showMessage("this is a test"); } }