Unique_ptr;
template<typename T>
class UniquePtr
{
public:
UniquePtr(T* ptr):_ptr(ptr)
{
}
~UniquePtr()
{
if(_ptr)
{
delete _ptr;
ptr = nullptr;
}
}
T& operator*()
{
return *_ptr;
}
T* operator->()
{
return _ptr;
}
private:
UniquePtr(const UniquePtr<T>& rhs) = delete;
UniquePtr<T>& operator=(const UniquePtr<T>& rhs) = delete;
private:
T* _ptr;
}
Weak_ptr
template<typename T>
class Weak_ptr
{
public:
Weak_ptr(T* ptr = NULL) :mptr(ptr) {}
~Weak_ptr()
{
}
Weak_ptr(const Weak_ptr<T>& rhs)
{
mptr = rhs.mptr;
}
Weak_ptr<T>& operator=(const Weak_ptr<T>& rhs)
{
if (this != &rhs)
{
mptr = rhs.mptr;
}
return *this;
}
Weak_ptr<T>& operator=(const Shared_ptr<T>& rhs)
{
mptr = rhs.getPtr();
return *this;
}
T* operator->()
{
return mptr;
}
T& operator*()
{
return *mptr;
}
private:
T* mptr;
};