diff options
| author | Elizabeth Alexander Hunt <me@liz.coffee> | 2026-07-02 11:55:17 -0700 |
|---|---|---|
| committer | Elizabeth Alexander Hunt <me@liz.coffee> | 2026-07-02 11:55:17 -0700 |
| commit | 6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 (patch) | |
| tree | ed97e39ec77c5231ffd2c394493e68d00ddac5a4 /Homework/cs3460/smart_pointers/main.cpp | |
| download | misc-undergrad-main.tar.gz misc-undergrad-main.zip | |
Diffstat (limited to 'Homework/cs3460/smart_pointers/main.cpp')
| -rw-r--r-- | Homework/cs3460/smart_pointers/main.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
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 <iostream>
+#include <memory>
+#include <string>
+
+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<int> p1 = std::make_shared<int>();
+ usu::shared_ptr<int> p2 = usu::make_shared<int>();
+ usu::shared_ptr<std::string> p2a = usu::make_shared<std::string>();
+
+ std::shared_ptr<int> p3 = std::make_shared<int>(10);
+ usu::shared_ptr<int> p4 = usu::make_shared<int>(10);
+
+ std::shared_ptr<std::string> p5 = std::make_shared<std::string>();
+ usu::shared_ptr<std::string> p6 = usu::make_shared<std::string>();
+ usu::shared_ptr<std::string> p6b = usu::make_shared<std::string>("Hi Mom!");
+
+ std::shared_ptr<MyClass> p7 = std::make_shared<MyClass>();
+ usu::shared_ptr<MyClass> p8 = usu::make_shared<MyClass>();
+
+ std::shared_ptr<MyClass> p9 = std::make_shared<MyClass>("Test");
+ usu::shared_ptr<MyClass> p10 = usu::make_shared<MyClass>("Test");
+
+ std::shared_ptr<MyClass> p11 = std::make_shared<MyClass>("Test", 2);
+ usu::shared_ptr<MyClass> p12 = usu::make_shared<MyClass>("Test", 2);
+
+ std::shared_ptr<MyClass> p13 = std::make_shared<MyClass>(1, 2);
+ usu::shared_ptr<MyClass> p14 = usu::make_shared<MyClass>(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<MyClass[]> a1 = usu::make_shared_array<MyClass, 4>();
+ for (unsigned int i = 0; i < a1.size(); i++)
+ {
+ a1[i].showMessage("this is a test");
+ }
+}
|
