C++笔记-6-c++静态与单例
文章目录
- C++笔记-6-c++静态与单例
- 前言
- 一、静态
-
- 二、单例
-
- 总结
前言
自学笔记,没有历史知识铺垫(省略百度部分)C++笔记-6-c++静态与单例
一、静态
静态成员变量
含义:将静态变量作用域,限制在类中共享使用
class Order
{
public:
static string order_no;
};
string Order::order_no = "SS.20221225.001";
int main()
{
cout << Order::order_no << endl;
}
SS.20221225.001
静态成员函数
class Order
{
public:
Order(string order_no_arg, string remark_arg)
{
order_no = order_no_arg;
remark = remark_arg;
}
static void printOrder(Order order)
{
cout << "no:" << order.order_no << ",remark:" << order.remark << endl;
}
private:
string order_no;
string remark;
};
int main()
{
Order order1("SS.20221225.001", "备注1");
Order::printOrder(order1);
Order order2("SS.20221225.002", "备注2");
Order::printOrder(order2);
}
no:SS.20221225.001,remark:备注1
no:SS.20221225.002,remark:备注2
二、单例
饿汉式
class Singleton
{
public:
static Singleton &getInstance(void)
{
return s_instance;
}
void printf()
{
cout << flag << endl;
}
private:
Singleton(int flag_arg) : flag(flag_arg)
{
cout << "饿汉式单例创建成功" << endl;
}
Singleton(const Singleton &);
static Singleton s_instance;
private:
int flag;
};
Singleton Singleton::s_instance(222);
int main()
{
cout << "启动程序" << endl;
Singleton &s1 = Singleton::getInstance();
Singleton &s2 = Singleton::getInstance();
s1.printf();
s2.printf();
return 0;
}
饿汉式单例创建成功
启动程序
222
222
懒汉式
class Singleton
{
public:
static Singleton &getInstance(void)
{
if (s_instance == nullptr)
{
lock_guard<mutex> lck(_mtx);
if (s_instance == nullptr)
{
s_instance = new Singleton(345);
}
}
return *s_instance;
}
void printf()
{
cout << flag << endl;
}
void release(void)
{
if (s_instance != nullptr)
{
delete s_instance;
s_instance = nullptr;
}
}
private:
Singleton(int flag_arg) : flag(flag_arg)
{
cout << "懒汉式单例创建成功" << endl;
}
Singleton(const Singleton &);
~Singleton()
{
cout << "单例销毁成功" << endl;
}
static Singleton *s_instance;
private:
static mutex _mtx;
private:
int flag;
};
Singleton *Singleton::s_instance = nullptr;
mutex Singleton::_mtx;
int main()
{
cout << "启动程序" << endl;
Singleton &s1 = Singleton::getInstance();
s1.printf();
s1.release();
Singleton &s2 = Singleton::getInstance();
s2.printf();
s2.release();
return 0;
}
总结
- C++ RAII机制
- C++ NULL存在二义性问题,可使用
nullptr
代表空
本章主要为C++笔记-6-c++静态与单例
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)