单例模式,可能是使用很广泛的设计模式。其意图是保证一个类仅有一个实例,并且可以被全局使用。
单列类 就是定义一个类,使用私有构造防止其他调用,在使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该指针。
对于 单列类释放问题,手动销毁就显得非常麻烦,并且容易忘记释放。所以实现一个自动释放指针的单列类就显得很重要了。因为我们定义的静态变量是放在全局区上的,受系统控制释放,所以我们程序结束自动释放静态变量这一特点来解决该问题。我们在类中定义一个静态类,这个类专门用来释放单列指针。下面附上代码
class singleRow //单列类
{
public:
static singleRow* GetSingleRow() //获取单列指针
{
if(m_psingleRow == nullptr) //判断是否已经创建该类
{
m_psingleRow = new singleRow();
}
return m_psingleRow;
}
private:
singleRow(){} //私有构造
//垃圾回收类 释放单列指针
class Garbo
{
public:
~Garbo()
{
if(singleRow::m_psingleRow != nullptr)
{
delete singleRow::m_psingleRow ;
singleRow::m_psingleRow = nullptr;
}
}
};
static Garbo garbo; //定义静态变量 系统结束自动释放该类 调用析构方法从而释放指针
static singleRow* m_psingleRow; //单列类实列静态指针
};
//静态变量初始化
singleRow::Garbo singleRow::garbo;
singleRow* singleRow::m_psingleRow = nullptr;