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