智能指针的简单分析(三)——unique

xiaoxiao2021-03-01  6

忽略了释放函数的,但是不妨碍理解主要实现

template<typename Ty, typename Dy = nullptr_t> class MyUniquePtr { typedef typename Ty* MyPointer; typedef typename Dy MyDeleter; typedef MyUniquePtr<Ty, Dy> MyObj; private: MyPointer m_ptPointer; MyDeleter m_deleter; public: MyUniquePtr() : m_ptPointer(nullptr) {}; MyUniquePtr(MyPointer p) :m_ptPointer(p) {}; MyUniquePtr(const MyObj& other) = delete; MyUniquePtr& operator= (const MyObj& other) = delete; MyUniquePtr(MyUniquePtr&& other) { this->m_ptPointer = other.m_ptPointer; this->m_deleter = other.m_deleter; other.m_ptPointer = nullptr; other.m_deleter = nullptr; }; MyUniquePtr& operator=(MyObj&& other) { this->m_ptPointer = other.m_ptPointer; this->m_deleter = other.m_deleter; other.m_ptPointer = nullptr; other.m_deleter = nullptr; return *this; } ~MyUniquePtr() { free();} MyPointer get() { return m_ptPointer; } MyDeleter get_deleter() { return m_deleter; }; MyPointer release() { auto pTemp = m_ptPointer; m_ptPointer = nullptr; return pTemp; } void reset(MyPointer p = nullptr) { free(); m_ptPointer = p; } void swap(MyObj& other) { auto ptPointer_Temp = other.get(); auto deleter_Temp = other.get_deleter(); other.m_ptPointer = get(); other.m_deleter = get_deleter(); m_ptPointer = ptPointer_Temp; m_deleter = deleter_Temp; } MyPointer operator->() { return m_ptPointer; } operator bool() { return m_ptPointer != nullptr; } private: void free() { if (m_ptPointer != nullptr) { delete m_ptPointer; m_ptPointer = nullptr; } } };

 

转载请注明原文地址: https://www.6miu.com/read-3350336.html

最新回复(0)