1)设计模式浅谈
设计模式:代码的一些写法,(这些写法与常规写法不太一样):
程序灵活,维护起来可能很方便,但是别人接管、阅读代码比较痛苦
用设计模式理念写出来的代码很晦涩《head first》
老外,应付特别大的项目的时候,把项目的开发经验,模块划分经验,总结整理出来的设计模式
先有开发需求,然后有总结和整理。
设计模式到中国来,不太一样,拿着一个程序(项目)往设计模式上套,一个小项目,非要弄几个设计模式。
设计模式一定有它独特的优点,更要活学活用,不要深陷其中,生搬硬套。
2)单例设计模式
单例:整个项目中,有某个特殊的类,属于该类对象,只能创建一个。
std::mutex itsmutex;
class MySingoliton
{
private static MySingoliton(){}//私有化了构造函数
public:
static MySingoliton *getInstance()
{
// if(m_instance != NULL)条件成立,表示m_instance一定已经new过了
// if(m_instance == NULL)条件成立,不代表m_instance一定没被new过
//可能线程1进入到 if条件的括号内,还没创建对象,就切换到了线程2,这样线程2也可以进入if条
件的花括号内
if(m_instance == NULL)//双重锁定,双重检查,提高效率
{
//自动加锁 ,这个锁只在第一次创建的时候有意义
std::unique_lock<std::mutex> itsUnique_lock(itsmutex);
if(m_instance == NULL)
{
m_instance = new MySingoliton();
static GC gc;//当程序结束前,会回收这个static对象,就会调用这个类的析构函数
//调用GC的析构函数的时候,就可以把MySingoliton对象给delete掉
}
}
return m_instance;
}
class GC
{
public:
~GC()//类的析构函数中
{
if(m_instance != NULL)
{
delete MySingoliton::m_instance;
MySingoliton::m_instance = NULL;