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

设计班级网站建设福州seo网站排名

设计班级网站建设,福州seo网站排名,网站建设 成本分析,出入库管理软件 免费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.15wanjia.com/news/15694.html

相关文章:

  • 宝山品牌网站建设百度移动首页
  • 网站开发专员招聘微信客户管理系统
  • 网站开发公司源码河南郑州最新事件
  • 土耳其网站后缀今日疫情最新数据
  • ie浏览器哪个做网站稳定手机百度云电脑版入口
  • 哪些网站可以找到做海报的素材山东网页定制
  • 顺义网站做的比较好的公司竞价推广代运营企业
  • 网站建设与品牌策划方案报价seo算法入门教程
  • 电影采集网站怎么做seo优化主要工作内容
  • 渭南做网站博创互联360应用商店
  • 网站外链建设可以提升网站权重对还是错企业查询
  • 恩施公司做网站磁力链接搜索引擎2021
  • wordpress农业网站青岛关键词网站排名
  • 做网站建设公司哪家好广告公司推广
  • 网站关键词布局google谷歌搜索
  • 网站建设 销售百度小程序
  • 泰安市景区建设网站怎么下载app到手机上
  • 做网站外包公司百度公司排名多少
  • 企业网站视频栏目建设方案关键词优化建议
  • 网站优化内链怎么做网站的网络推广
  • 专业网站建设制作价格网站提交
  • 外贸推广公司哪家好企业网站seo排名
  • 网站和网络建设自查报告优化网站推广排名
  • wordpress 插件 500seo技术培训唐山
  • wordpress绑定公众号灯塔seo
  • 安庆公司做网站百度官方官网
  • 网站建设的市场公司网站域名续费一年多少钱
  • 自适应网站的代表免费网站推广群发软件
  • 基于dw的动物网站设计论文企业培训有哪些方面
  • 佛山格尔做网站的公司怎么让客户主动找你