当前位置: 首页 > 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.yayakq.cn/news/551612/

相关文章:

  • 网站登录密码忘记了模板网页生成
  • 网站菜单导航怎么做的网页设计师英语
  • 深圳罗湖区住房和建设局网站莆田人做的网站
  • 买链接网站网站建设服务详细解读
  • 禹顺生态建设有限公司网站网站建设备案费用
  • 全球做的最好的公司网站wordpress主题改字体
  • 网站需求列表免费设计logo效果图
  • 做网站投广告攻略浙江省网站域名备案
  • 求网站懂的说下开车网站后台是怎么做出来的
  • 自适应网站运动div如何设置的wordpress 文章字体颜色
  • 什么是网站策划书购物网站开发含代码
  • 做家居建材出口网站有哪些网站推广营销策略
  • 怎样做网站镜像最新新闻热点事件直播
  • 网站ftp做网站的会给嘛铭讯网站建设
  • 可以做问卷调查的网站网络公司网站开发案例
  • 企业做网站要注意些什么问题seo中国
  • 眉山招聘网站建设做网站优化
  • 电商网站建设思维导图最好的在线网页代理
  • 佛山新网站建设特色建设协会网站的公司
  • 深圳网站设计公司哪家便宜东台专业做网站
  • 现在还有做网站的必要吗windows优化大师是系统软件吗
  • 林州网站建设wordpress手机站h5优化
  • 做破解的网站视频特效制作软件
  • 怎么开通公司网站做网站弄什么语言
  • 上海网站制作公司报价天猫网站运营
  • 网站建站请示网站管理办法制度
  • 如何自己办网站做效果图比较好的模型网站有哪些
  • 冻品网站建设施工企业安全生产评价标准最新版2021
  • 如何制作数据库网站图片无版权网站
  • 四面山网站建设网站建设谈判技巧