您的位置:首页 > 游戏 > 游戏 > c2c网站是什么_莱芜十七中网站_高清视频线转换线_网络营销出来可以干什么工作

c2c网站是什么_莱芜十七中网站_高清视频线转换线_网络营销出来可以干什么工作

2025/2/21 3:42:13 来源:https://blog.csdn.net/CD200309/article/details/144177283  浏览:    关键词:c2c网站是什么_莱芜十七中网站_高清视频线转换线_网络营销出来可以干什么工作
c2c网站是什么_莱芜十七中网站_高清视频线转换线_网络营销出来可以干什么工作
设计模式( Design Pattern )是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的,目的是为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。
单例模式:一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享
两种实现模式:
1. 饿汉模式:程序执行前就创建了,全局只有一个实例对象。
class A
{
public:static A* create(){return &_a;}
private:int _port;// 静态资源全局只有一份// 属于整个类,受类域影响static A _a;private:A() {}A(const A& copy) = delete;A& operator=(const A& copy) = delete;
};
A A::_a;

借助全局对象在程序运行之前创建初始化,每次访问都是同一个对象。

缺点:

如果程序里出现大量的懒汉模式的单例,程序运行起来要预先创建大量的资源,导致程序启动慢。

如果类与类之间有相互依赖关系,全局对象创建顺序可能是乱的,那么就会导致A需要用B类,A类先创建,而B类未创建。

2. 懒汉模式:和饿汉模式相反,是在程序运行时有且只有一个实例对象
class A
{
public:static A* create(){// C++11之前存在线程安全问题// 可能多个线程同时调用 new 在调用,operator new// 会导致 new 了多个 A 给 a*,所以要加锁static A *a = new A;return a;}
private:int _port;private:A() {}A(const A& copy) = delete;A& operator=(const A& copy) = delete;
};

另一种方式:

class A
{
public:static A* create(){// 如果有大量的获取单例对象// 就不用进行频繁的加锁解锁if (_a == nullptr){// C++11之前 对多线程情况下的保护_mt.lock();if (_a == nullptr){_a = new A;}_mt.unlock();}return _a;}// 析构静态资源,程序结束自动调用class Release{public:~Release() { if (A::_a != nullptr)delete A::_a; }};static Release _RL;private:// 程序执行之前创建,大小忽略不计static A* _a;static mutex _mt;private:A() {}A(const A& copy) = delete;A& operator=(const A& copy) = delete;
};
// 初始化静态成员
A* A::_a = nullptr;
mutex A::_mt;
A::Release A::_RL;

缺点:在C++11之前,多线程环境下有线程安全问题,要加锁保护。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com