/* **************************************************************************** */ /* */ /* ::: :::::::: */ /* unique_ptr.tpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/20 09:53:45 by maldavid #+# #+# */ /* Updated: 2024/01/20 09:53:45 by maldavid ### ########.fr */ /* */ /* **************************************************************************** */ #include namespace unstd { template UniquePtr::UniquePtr() : _ptr(NULL) {} template UniquePtr::UniquePtr(T* ptr) : _ptr(ptr) {} template UniquePtr::UniquePtr(UniquePtr& rhs) : _ptr(rhs._ptr) { rhs._ptr = NULL; } template T* UniquePtr::get() { return _ptr; } template void UniquePtr::swap(const UniquePtr& ptr) { T* temp = _ptr; _ptr = ptr._ptr; ptr._ptr = temp; } template void UniquePtr::reset(T* ptr) { if(_ptr != NULL) delete _ptr; _ptr = ptr; } template T* UniquePtr::release() { T* temp = _ptr; _ptr = NULL; return temp; } template UniquePtr::operator bool() const { return _ptr != NULL; } template UniquePtr& UniquePtr::operator=(T* ptr) { assert(_ptr == NULL && "UniquePtr assertion failed : `operator=`, unique ptr already holds a pointer"); reset(ptr); } template T* UniquePtr::operator->() const { return _ptr; } template T& UniquePtr::operator*() const { return *_ptr; } template UniquePtr::~UniquePtr() { if(_ptr != NULL) delete _ptr; } template UniquePtr::UniquePtr(const UniquePtr& ptr) { (void)ptr; } template UniquePtr& UniquePtr::operator=(const UniquePtr& ptr) { (void)ptr; return *this; } }