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

江苏屹峰建设网站北京南站地铁线路图

江苏屹峰建设网站,北京南站地铁线路图,太原网站建设培训学校,平面设计的软件都有什么C笔记之智能指针和单例、依赖注入结合使用 code review! 文章目录 C笔记之智能指针和单例、依赖注入结合使用例1.一个类不使用单例#xff0c;另一个类使用单例例2.两个类都使用单例#xff0c;并且通过getInstance()传入类的实例例3.std::make_unique不能访问私有的构造函…C笔记之智能指针和单例、依赖注入结合使用 code review! 文章目录 C笔记之智能指针和单例、依赖注入结合使用例1.一个类不使用单例另一个类使用单例例2.两个类都使用单例并且通过getInstance()传入类的实例例3.std::make_unique不能访问私有的构造函数例4.不通过友元通过静态成员函数在类外部调用类私有的构造函数 例1.一个类不使用单例另一个类使用单例 运行 代码 #include iostream #include memoryclass Logger { private:Logger() {} // 私有构造函数防止外部实例化public:static Logger getInstance() {static Logger instance; // 静态局部变量确保只有一个实例return instance;}void log(const std::string message) {std::cout Log: message std::endl;} };class Service { private:std::shared_ptrLogger logger;public:Service(std::shared_ptrLogger logger) : logger(logger) {}void doSomething() {logger-log(Service is doing something.);} };int main() {// 在依赖注入的方式下创建 Service 实例并传入 Logger 实例Service service(std::make_sharedLogger(Logger::getInstance()));// 使用 Service 实例service.doSomething();return 0; }例2.两个类都使用单例并且通过getInstance()传入类的实例 运行 代码 #include iostream #include memoryclass Logger {private:Logger() {} // 私有构造函数防止外部实例化public:static std::shared_ptrLogger getInstance() {static std::shared_ptrLogger instance std::shared_ptrLogger(new Logger());return instance;}void log(const std::string message) {std::cout Log: message std::endl;} };class Service {private:std::shared_ptrLogger logger;Service(const std::shared_ptrLogger logger) : logger(logger) {}public:static std::shared_ptrService getInstance(const std::shared_ptrLogger logger) {static std::shared_ptrService instance std::shared_ptrService(new Service(logger));return instance;}void doSomething() {logger-log(Service is doing something.);} };int main() {// 创建 Logger 实例智能指针管理std::shared_ptrLogger logger Logger::getInstance();// 创建 Service 实例并传入 Logger 实例std::shared_ptrService service Service::getInstance(logger);// 使用 Logger 实例logger-log(Logging from main);// 使用 Service 实例service-doSomething();return 0; }例3.std::make_unique不能访问私有的构造函数 编译报错 这段代码存在一些小问题 在 Service 类的 getInstance 方法中你使用了 std::make_unique 来创建一个 Service 实例但是 Service 的构造函数是私有的不能直接使用 make_unique。你应该改用 std::shared_ptrService(new Service(logger)) 来创建实例就像在 Logger 类中的 getInstance 方法中一样。 代码 #include iostream #include memoryclass Logger {private:Logger() {} // 私有构造函数防止外部实例化public:static std::shared_ptrLogger getInstance() {static std::shared_ptrLogger instance std::shared_ptrLogger(new Logger());return instance;}void log(const std::string message) {std::cout Log: message std::endl;} };class Service {private:std::shared_ptrLogger logger;Service(const std::shared_ptrLogger logger) : logger(logger) {}public:static std::shared_ptrService getInstance(const std::shared_ptrLogger logger) {static std::shared_ptrService instance std::make_uniqueService(logger);return instance;}void doSomething() {logger-log(Service is doing something.);} };int main() {// 创建 Logger 实例智能指针管理std::shared_ptrLogger logger Logger::getInstance();// 创建 Service 实例并传入 Logger 实例std::shared_ptrService service Service::getInstance(logger);// 使用 Logger 实例logger-log(Logging from main);// 使用 Service 实例service-doSomething();return 0; }例4.不通过友元通过静态成员函数在类外部调用类私有的构造函数 运行 将实例的创建和初始化封装在了名为 createInstance 的公共静态成员函数中。这个函数在类的外部被调用时会调用私有构造函数创建一个实例并返回一个指向这个实例的智能指针。 通过这种方式你不需要将 std::make_unique 声明为友元函数也不需要使用特定的友元声明。而是通过公共静态成员函数间接地在类的外部创建实例从而绕过了直接访问私有构造函数的问题。 构造函数不是静态成员它们属于实例化的过程而不是类本身的静态成员。 在C中构造函数不是静态成员它们是用于创建类的实例的特殊成员函数。私有构造函数意味着不能在类的外部直接调用它来创建实例。这是单例模式的一个关键概念它确保只有一个实例被创建。 而使用公共静态成员函数如 createInstance的优势在于它可以在类的外部创建实例。这是因为静态成员函数不依赖于特定实例所以它们可以在没有创建对象的情况下被调用。通过在公共静态成员函数中调用私有构造函数你可以在类的外部创建类的实例。 所以使用公共静态成员函数解决单例模式中私有构造函数访问问题的关键在于它提供了一种通过类的内部机制即静态成员函数来间接创建实例的方式绕过了私有构造函数不能直接在外部调用的限制。 代码 #include iostream #include memoryclass Dependency {public:void doSomething() {std::cout Dependency is doing something. std::endl;} };class Singleton {private:Singleton() { /* 构造函数私有化 */}static std::unique_ptrSingleton instance;std::unique_ptrDependency dependency; // 保存依赖项的指针public:// 创建 Singleton 实例的公共静态函数static std::unique_ptrSingleton createInstance() {return std::unique_ptrSingleton(new Singleton);}// 获取 Singleton 实例的公共静态函数static Singleton getInstance() {if (!instance) {instance createInstance(); // 创建实例instance-dependency std::make_uniqueDependency(); // 初始化依赖项}return *instance;}void useDependency() {dependency-doSomething();}// 其他成员函数 };// 初始化静态成员变量 std::unique_ptrSingleton Singleton::instance nullptr;int main() {// 创建 Singleton 实例std::unique_ptrSingleton singleton Singleton::createInstance();// 使用注入的依赖项进行操作singleton-useDependency();return 0; }
http://www.pierceye.com/news/459484/

相关文章:

  • 网站建设网站需要什么软件有哪些使用wordpress开发一个页面
  • 贵溪市城乡建设局网站手机网站推荐
  • wordpress多站点的路径深圳龙岗区宝龙街道
  • 做外贸免费发布产品的网站装修软件app哪个好
  • 网站注册系统医疗器械分类目录2021
  • 珠海建设网站百度收录有什么好处
  • 二手网站专业做附近人的有吗免费申请网站永久
  • 校园二手市场网站开发网站文章优化流程方案
  • 手机网站的必要性衡水网站设计费用
  • 厦门市建设安全管理协会网站网站登录模板下载
  • 江苏启安建设集团有限公司网站wordpress图标字体不显示不出来
  • 网络营销网站规划建设实训作业免费云空间
  • 杭州建设网站官网想学做宝宝食谱上什么网站
  • 用自己服务器做网站乡镇信息公开网站建设制度
  • 网站建设平台简介电子商务网站模版
  • 广州做网站怎么样安监网站如何做紧急预案备案
  • 自己做的网站怎样才有网址浏览oa软件多少钱一套
  • 旅游电子商务网站的建设深圳华强北赛格大厦最新消息
  • 视觉设计网站建设有没有做.net面试题的网站
  • 上海资格证报名网站惠州抖音seo
  • 网页设计作品html辽宁做网站和优化哪家好
  • 做门户网站 cms山东济南网站建设优化
  • 网站美工怎么做wordpress论坛化插件
  • 怎样建设自己的视频网站首页电子商务网站开发教程论文6
  • 推荐一个做照片书的网站湛江网站建设招聘
  • 厦门建网站网址ai自动设计logo
  • 蓝色织梦cms企业网站模板全站源码招聘类网站如何做
  • 郑州建设银行网站wordpress数据库怎么设置
  • 电子商务网站实例php网站建设哪家好
  • 网站开发课程报告心得简单的网页设计作品欣赏