From 6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 Mon Sep 17 00:00:00 2001 From: Elizabeth Alexander Hunt Date: Thu, 2 Jul 2026 11:55:17 -0700 Subject: Init --- Homework/cs3460/smart_pointers/main.cpp | 113 ++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 Homework/cs3460/smart_pointers/main.cpp (limited to 'Homework/cs3460/smart_pointers/main.cpp') diff --git a/Homework/cs3460/smart_pointers/main.cpp b/Homework/cs3460/smart_pointers/main.cpp new file mode 100644 index 0000000..7ae7e71 --- /dev/null +++ b/Homework/cs3460/smart_pointers/main.cpp @@ -0,0 +1,113 @@ +#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"); + } +} -- cgit v1.3