C++-(19)-单例模式
单例模式:一个系统中的一个类对象实例唯一存在。
特点: 1.类构造函数为私有的。
2.静态的指向本身的指针。
3.析构函数为共有的
4.静态的获取对象指针函数
1.Container.h
//Container.h
class Recyc{
public:Recyc();
~Recyc();
};
class Container
{
//构造函数私有
private:
Container();
classA *m_classA;
classB *m_classB;
public:
static Container *m_instance;//静态的指向本身的指针
~Container(); //公有的析构函数
classA *GetclassAInstance() const;
classB *GetclassBInstance() const;
static Container *GetInstance();//被外界调用,获取对象指针函数
};
2.Container.cpp
//Container.cpp
//初始化指针
//程序退出时会自动调用这个对象的析构函数
static Recyc recyc;
Container* Container::m_instance=NULL;
Recyc::Recyc(){}
Recyc::~Recyc()
{
Container *con=Container::GetInstance();
if(con!=NULL)
{
delete con;
}
}
//构造函数初始化
Container::Container()
:m_classA(NULL),
m_classB(NULL)
{
m_classA=new classA;
m_classB=new classB;
}
//析构函数
Container::~Container()
{
if(m_classA!=NULL)
{
delete m_classA;
}
if(m_classB!=NULL)
{
delete m_classB;
}
}
//得到实例的函数
Container *Container::GetInstace()
{
//new 只会执行一次
if(NULL==m_instance)
{
m_instance=new Container;
}
return m_instance;
}
//
classA *GetclassAInstance() const
{
return m_classA;
}
Ultrasonic *GetclassBInstance() const
{
return m_classB;
}
3.main函数调用
int main()
{
Init();
Container* con;
classA * pclassA;
con=Container::GetInstace(); //静态成员函数
//获取类的数据
pclassA=con->GetClassAInstance(); //获取数据
pclassA->m_coporation="muc"; //
pclassB=con->GetClassBInstance(); //
}

浙公网安备 33010602011771号