#ifndef DATA_SMARTPOINTER_H #define DATA_SMARTPOINTER_H #include "Pointer.h" namespace Kylin { template class SmartPointer : public Pointer { public: SmartPointer(T *p) { this->m_pointer = p; } SmartPointer(SmartPointer &&other) { this->m_pointer = other.m_pointer; other.m_pointer = nullptr; } SmartPointer(const SmartPointer &) = delete; ~SmartPointer() { if (this->m_pointer != nullptr) { delete this->m_pointer; } } SmartPointer &operator=(SmartPointer &&other) { if (this != &other) { if (this->m_pointer != nullptr) delete this->m_pointer; this->m_pointer = other.m_pointer; other.m_pointer = nullptr; } return *this; } }; } // namespace Kylin #endif // SMARTPOINTER_H