37 lines
870 B
C
37 lines
870 B
C
|
#ifndef DATA_SMARTPOINTER_H
|
||
|
#define DATA_SMARTPOINTER_H
|
||
|
|
||
|
#include "Pointer.h"
|
||
|
|
||
|
namespace Kylin {
|
||
|
|
||
|
template <typename T>
|
||
|
class SmartPointer : public Pointer<T> {
|
||
|
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
|