单例模式懒汉式
优点:不需要这个单例的时候不创建,节省内存。
缺点:每次获取单例都要判断,降低软件性能。遇到多线程的时候可能会发生创建多个对象(解决办法:加线程锁,线程同步方式)。
单例模式饿汉式
优点:对于多线程来说相对安全。
缺点:用不用都占内存,无法通过getInstance()传入参数(用set方法)。
#include <iostream>
using namespace std;
//懒汉式
class A
{
public:
static A* getinstance(){
if(nullptr==m_instance){
m_instance=new A;
}
handle_count++;
return m_instance;
}
static void release(){
handle_count--;
if (nullptr!=m_instance&&handle_count==0){
delete m_instance;
m_instance=nullptr;
}
}
private:
A(){}
static A* m_instance;
static int handle_count;
};
//饿汉式
class B
{
public:
static B* getinstance(){
handle_count++;
return m_instance;
}
static void release(){
handle_count--;
if (nullptr!=m_instance&&handle_count==0){
delete m_instance;
m_instance=nullptr;
}
}
private:
B(){}
static B* m_instance;
static int handle_count;
};
//懒汉式
A* A::m_instance=nullptr;
int A::handle_count=0;
//饿汉式
B* B::m_instance=new B;
int B::handle_count=0;
int main()
{
B* um1=B::getinstance();
B* um2=B::getinstance();
if(um1==um2){
cout<<"同一个对象"<<endl;
}else{
cout<<"不同的对象"<<endl;
}
system("pause");
return 0;
}