手写UniquePtr

UniquePtr:独占所有的对象。

 1 #include <iostream>
 2 
 3 
 4 using namespace std;
 5 template<typename T>
 6 class UniquePtr{
 7 private:
 8     T * ptr;
 9     //non-copy
10     UniquePtr(const UniquePtr<T> & other);
11     UniquePtr & operator=(const UniquePtr<T>  & other);
12 public:
13     //空参构造
14     UniquePtr():ptr(nullptr){};
15     //含参构造
16     UniquePtr(T* _ptr ):ptr(_ptr){};
17     //移动构造函数,移交所有权
18     UniquePtr(UniquePtr<T> && other){
19         ptr = other.ptr;
20         other.ptr = nullptr;
21     };
22     //移动赋值,也是移交所有权
23     UniquePtr & operator=(UniquePtr<T> && other){
24         std::swap(ptr,other.ptr);
25         return *this;
26     };
27     //析构
28     ~UniquePtr(){
29         if(ptr != nullptr){
30             delete ptr;
31             ptr = nullptr;
32         }
33     };
34 };

 

posted @ 2022-05-18 14:47  coyote25  阅读(101)  评论(0编辑  收藏  举报