1、自己实现封装了一个智能指针,并且使用了模板
目录
代码实现:
#include <iostream>
using namespace std;
template <typename T>
class UniquePtr
{
private:
T *ptr;
public:
//默认构造函数
UniquePtr():ptr(nullptr){}
//构造函数
explicit UniquePtr(T *p):ptr(p){}
//析构函数
~UniquePtr(){
delete ptr;
}
//禁止拷贝构造函数
UniquePtr(const UniquePtr&) = delete;
//禁止拷贝赋值运算符
UniquePtr &operator=(const UniquePtr&) = delete;
//移动构造函数
UniquePtr(UniquePtr &&other)noexcept:ptr(other.ptr)
{
other.ptr = nullptr;
}
//重载*操作符
T& operator*()const
{
return *ptr;
}
//重载->操作符
T& operator->()const
{
return *ptr;
}
//移动赋值预算符
UniquePtr &operator=(UniquePtr &&other)noexcept
{
if(this != &other)
{
delete ptr;
ptr = other.ptr;
other.ptr = nullptr;
}
return *this;
}
};
int main()
{
UniquePtr<int> unique(new int(10));
UniquePtr<int> unique1 = move(unique);
//cout<<*unique<<endl;
cout<<*unique1<<endl;
UniquePtr<int> unique2;
unique2 = move(unique1);
cout<<*unique2<<endl;
return 0;
}