手写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 };