template <typename T>
class poor_unique_ptr {
public:
explicit poor_unique_ptr(T* ptr=nullptr): ptr_(ptr) {};
~poor_unique_ptr() {
if (ptr_) {
delete ptr_;
}
}
// 删除拷贝构造和拷贝赋值
poor_unique_ptr(const poor_unique_ptr&) = delete;
poor_unique_ptr& operator=(const poor_unique_ptr&) = delete;
// 移动拷贝和移动赋值
poor_unique_ptr(poor_unique_ptr&& rhs): ptr_{rhs.release()} {}
poor_unique_ptr& operator=(poor_unique_ptr&& rhs) {
reset(rhs.release());
return *this;
}
T* get() const {return ptr_;}
T* release() { // 并不会释放其指向的对象
T *p = ptr_;
ptr_ = nullptr;
return p;
}
void reset(T* ptr) {
delete ptr_;
ptr_ = ptr;
}
void swap(poor_unique_ptr& rhs){
std::swap(ptr_, rhs.ptr_);
}
T& operator*() {return *ptr_;}
T* operator->() {return ptr_;}
explicit operator bool() {return static_cast<bool>(ptr_);}
private:
T* ptr_;
};