Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <typename T>
- class UniquePtr {
- private:
- T* data;
- public:
- UniquePtr() {
- }
- UniquePtr(T * ptr) {
- data = ptr;
- }
- UniquePtr(const UniquePtr&) = delete;
- UniquePtr(UniquePtr&& other) {
- if (data) {
- delete data;
- }
- data = other.data;
- other.data = nullptr;
- }
- UniquePtr& operator = (const UniquePtr&)=delete;
- UniquePtr& operator = (nullptr_t n) {
- if (data) {
- delete data;
- }
- data = n;
- return *this;
- }
- UniquePtr& operator = (UniquePtr&& other) {
- if (data) {
- delete data;
- }
- data = other.data;
- other.data = nullptr;
- return *this;
- }
- ~UniquePtr() {
- if (data) {
- delete data;
- }
- }
- T& operator * () const {
- return *data;
- }
- T& operator * () {
- return *data;
- }
- T * operator -> () const {
- return data;
- }
- T * Release() {
- T* temp = data;
- data = nullptr;
- return temp;
- }
- void Reset(T * ptr) {
- if (data) {
- delete data;
- }
- data = ptr;
- }
- void Swap(UniquePtr& other) {
- T* temp = new T;
- temp = other.data;
- other.data = data;
- data = temp;
- delete temp;
- }
- T * Get() const {
- return data;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement