当前位置: 首页 > news >正文

专业的网站设计网络足球积分排行榜最新

专业的网站设计网络,足球积分排行榜最新,wordpress密码原理,外贸在什么网站做C笔记之单例通过GetInstance传递参数 code review! 文章目录 C笔记之单例通过GetInstance传递参数例1.普通指针的单例例2.结合智能指针和std::call_once例3.编译不通过的错误例子,在GetInstance内不可以使用std::make_shared来创建对象 例1.普通指针的单例 运行 …

C++笔记之单例通过GetInstance传递参数

code review!

文章目录

  • C++笔记之单例通过GetInstance传递参数
    • 例1.普通指针的单例
    • 例2.结合智能指针和std::call_once
    • 例3.编译不通过的错误例子,在GetInstance内不可以使用std::make_shared来创建对象

例1.普通指针的单例

在这里插入图片描述

运行
在这里插入图片描述

代码

#include <iostream>
#include <string>class Singleton {public:// 获取单例实例的静态函数,可以传递构造函数所需的参数static Singleton *GetInstance(const std::string &value) {if (!instance) {instance = new Singleton(value);}return instance;}void PrintValue() {std::cout << value << std::endl;}private:// 私有构造函数,防止直接实例化Singleton(const std::string &val) : value(val) {}static Singleton *instance;std::string value;
};// 初始化静态成员变量
Singleton *Singleton::instance = nullptr;int main() {Singleton *instance1 = Singleton::GetInstance("Instance 1");instance1->PrintValue(); // 输出:Instance 1Singleton *instance2 = Singleton::GetInstance("Instance 2");instance2->PrintValue(); // 输出:Instance 1,因为单例已经创建,不会再次创建新实例return 0;
}

例2.结合智能指针和std::call_once

在这里插入图片描述

使用 std::shared_ptrstd::call_once 来实现单例模式,并避免了调用私有构造函数:
在这个示例中,通过直接使用 new Singleton(value) 来创建 std::shared_ptr<Singleton> 的实例,这样就能够调用私有的构造函数。

运行
在这里插入图片描述

代码

#include <iostream>
#include <memory>
#include <string>
#include <mutex>class Singleton {
public:// 获取单例实例的静态函数,可以传递构造函数所需的参数static std::shared_ptr<Singleton> GetInstance(const std::string& value) {std::call_once(initFlag, [&]() {instance = std::shared_ptr<Singleton>(new Singleton(value));});return instance;}void PrintValue() {std::cout << value << std::endl;}private:// 私有构造函数,防止直接实例化Singleton(const std::string& val) : value(val) {}static std::shared_ptr<Singleton> instance;static std::once_flag initFlag;std::string value;
};// 初始化静态成员变量
std::shared_ptr<Singleton> Singleton::instance = nullptr;
std::once_flag Singleton::initFlag;int main() {std::shared_ptr<Singleton> instance1 = Singleton::GetInstance("Instance 1");instance1->PrintValue(); // 输出:Instance 1std::shared_ptr<Singleton> instance2 = Singleton::GetInstance("Instance 2");instance2->PrintValue(); // 输出:Instance 1,因为单例已经创建,不会再次创建新实例return 0;
}

例3.编译不通过的错误例子,在GetInstance内不可以使用std::make_shared来创建对象

在这里插入图片描述

编译报错:
在这里插入图片描述

在 C++ 中,std::make_shared 会调用构造函数来创建对象,但是由于构造函数是私有的,会导致编译错误。

http://www.zhongyajixie.com/news/21372.html

相关文章:

  • curl 下载网站图片刚刚中国出啥大事了
  • 垂直性门户网站有哪些发稿
  • 家具flash网站模板下载网上代写文章一般多少钱
  • html css 网站模板游戏代理
  • 编程自己做网站广东seo快速排名
  • 中国十大做网站公司百度官方网址
  • 微信网站开发多少钱微信scrm系统
  • 泉州网站建设哪家公司好南宁网站seo外包
  • 滁州市琅琊区规划建设局网站百度网盘下载
  • 新乡网站优化谁能给我个网址
  • 怎么做网站出肉狗抖音广告推广怎么收费
  • 德州市建设街小学网站网站的营销推广方案
  • 网站前端设计要做什么的谷歌排名推广
  • 购买手表的网站网络营销策划与创意
  • 做鱼网站的域名长春百度seo排名
  • 资源网站很难做网站长尾关键词排名软件
  • 真正免费网站申请全国疫情防控最新数据
  • 网站做百度百科百度地图关键词优化
  • php企业网站管理系统拉新充场app推广平台
  • wordpress 在线教育模板seo网络推广企业
  • 做一份网站的步zou谷歌应用商店app下载
  • 免费网站模板软件手机如何制作网站教程
  • 连云港东海县做网站天津百度分公司
  • 免费做销售网站有哪些百度seo排名公司
  • 推广网站刷排名广告sem是什么意思
  • 大淘客网站怎么做自动点击器
  • 一个网站同时做竞价和seo怎么自己做网站
  • html5 3d网站百度地图广告投放
  • 怎么做ppt教程网站最近新闻摘抄
  • erp网站代做市场调研报告包括哪些内容