代码
template<class T>
class SmartPointer{
public:
SmartPointer():m_Pointer(nullptr), m_RefPointer(nullptr) {}
SmartPointer(T* target):m_Pointer(target), m_RefPointer(nullptr) {
addReference();
}
SmartPointer(const SmartPointer<T>& from):m_RefPointer(from.m_RefPointer), m_Pointer(fromt.m_Pointer) {
addReference();
}
~SmartPointer(){
removeReference();
}
void addReference() {
if (m_RefPointer) (*m_RefPointer)++;
else m_RefPointer = new int(1);
}
void removeReference() {
if (m_RefPointer) {
(*m_RefPointer)--;
if ((*m_RefPointer) == 0) {
delete m_RefPointer;
delete m_Pointer;
m_RefPointer = nullptr;
m_Pointer = nullptr;
}
}
}
SmartPointer<T>& operator = (const SmartPointer<T>& that){
if (this != &that){
removeReference();
this->m_Pointer = that.m_Pointer;
this->m_RefPointer = that.m_RefPointer;
addReference();
}
return *this;
}
private:
T* m_Pointer;
int* m_RefPointer;
};
参考链接:https://blog.imalan.cn/archives/322/