From 12d0c45322d0111e8e14b66fb2bea257f64baf3e Mon Sep 17 00:00:00 2001 From: Pagwin Date: Fri, 13 Dec 2024 22:46:36 -0500 Subject: [PATCH] I'm to tired to figure out how to get the base and derived class configured to work properly much less the pointer casts --- SharedPtr.hpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/SharedPtr.hpp b/SharedPtr.hpp index 6f3de5b..0735f20 100644 --- a/SharedPtr.hpp +++ b/SharedPtr.hpp @@ -16,7 +16,7 @@ template struct Base { T *ptr; Base(T *ptr) : ptr{ptr} {} - template Base(Base const &ptr) : ptr{ptr.ptr} {} + template Base(Base &ptr) : ptr{ptr.ptr} {} public: virtual T &operator*() { return *ptr; } @@ -28,6 +28,7 @@ template class MyDerived : public Base { public: MyDerived(U *ptr) : Base{ptr} { this->ptr = ptr; } + MyDerived(Base &ptr) : Base{ptr.ptr} { this->ptr = ptr.ptr; } U &operator*() { return *ptr; } U *operator->() { return ptr; } virtual ~MyDerived() { delete this->ptr; } @@ -46,7 +47,9 @@ public: static_cast(ptr ? 1 : 0)}} {} SharedPtr(const SharedPtr &p) : ptr{p.ptr}, count{p.count} {} template - SharedPtr(const SharedPtr &p) : ptr(p.ptr), count{p.count} { + SharedPtr(const SharedPtr &p) + : ptr(MyDerived(const_cast &>(*p.ptr))), + count{p.count} { (*count)++; } SharedPtr(SharedPtr &&p) : ptr{p.ptr} { p.ptr = nullptr; }