概述:
之前写的 SmartPointer 只能指向单个的变量,不能完全发挥指针的作用。
通过技术机制(ref)标识堆内存
- 堆内存被指向时:ref++
- 指针被置空时:ref--
- ref == 0 时:释放堆内存
代码
#ifndef SMARTPOINT_H_
#define SMARTPOINT_H_
#include "Pointer.h"
#include "Exception.h"
#include <cstdlib>
namespace MYLIB{
template <typename T>
class SharePointer:public Pointer<T>
{
protected:
int *m_ref; // 堆空间的计数变量,具有和相关联的对象并联且有相同的生命周期
void assign(const SharePointer<T>& obj)
{
this->m_ref = obj.m_ref;
this->m_pointer = obj.m_pointer;
if (this->m_ref)
{
(*this->m_ref)++;
}
}