Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstddef>
- #include <utility>
- template<class T>
- class UniquePtr {
- private:
- T *ptr = nullptr;
- public:
- UniquePtr () {}
- UniquePtr (T * const _ptr) : ptr(_ptr) { }
- UniquePtr (UniquePtr &&_ptr) {
- ptr = _ptr.ptr;
- _ptr.ptr = nullptr;
- }
- UniquePtr& operator=(nullptr_t) {
- delete ptr;
- ptr = nullptr;
- return *this;
- }
- UniquePtr& operator=(UniquePtr &&_ptr) {
- delete ptr;
- ptr = _ptr.ptr;
- _ptr.ptr = nullptr;
- return *this;
- }
- ~UniquePtr () {
- delete ptr;
- }
- T& operator*() const {
- return *ptr;
- }
- T* operator->() const {
- return ptr;
- }
- T* release() {
- auto ans = ptr;
- ptr = nullptr;
- return ans;
- }
- void reset(T *_ptr) {
- delete release();
- ptr = _ptr;
- }
- void swap(UniquePtr &_ptr) {
- std :: swap(ptr, _ptr.ptr);
- }
- T* get() const {
- return ptr;
- }
- explicit operator bool() const {
- return ptr;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement