首页 > 编程语言 >C++学习随笔——简单的单例设计模式实例

C++学习随笔——简单的单例设计模式实例

时间:2024-08-26 10:27:31浏览次数:6  
标签:private 实例 C++ 单例 设计模式 构造函数

点击查看代码
#include <iostream>

class Singleton {
private:
    // 私有化构造函数,防止外部实例化
    Singleton() {
        std::cout << "Singleton Instance Created!" << std::endl;
    }

    // 删除拷贝构造函数和赋值运算符,防止拷贝实例
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

public:
    // 提供一个全局访问点,返回唯一实例
    static Singleton& getInstance() {
        static Singleton instance;  // 静态局部变量,第一次调用时创建实例
        return instance;
    }

    void showMessage() {
        std::cout << "Hello from Singleton!" << std::endl;
    }
};

int main() {
    // 获取Singleton的唯一实例并调用方法
    Singleton& singleton1 = Singleton::getInstance();
    singleton1.showMessage();

    // 再次获取实例
    Singleton& singleton2 = Singleton::getInstance();

    // 检查两个实例是否相同
    if (&singleton1 == &singleton2) {
        std::cout << "singleton1 and singleton2 are the same instance." << std::endl;
    } else {
        std::cout << "singleton1 and singleton2 are different instances." << std::endl;
    }

    return 0;
}

单例设计模式与我之前学习的C++代码都有所不同:
1、为了防止外部随意实例化对象,类的构造函数和析构函数采用了private访问修饰符。
2、getInstance()方法中的静态局部变量instance在第一次调用时创建,并在程序的生命周期中存在。(C++11及以后的标准中保证线程安全的懒汉式单例模式
3、删除了拷贝构造函数和operator=,防止用户意外调用拷贝构造函数创造新的实例。

标签:private,实例,C++,单例,设计模式,构造函数
From: https://www.cnblogs.com/kitanoki/p/18380362

相关文章

  • 第四章:行为型模式(11种)《Java设计模式宝典:从入门到精通》
      在进入第四章之前,我为大家准备了设计模式专栏的快速访问链接,方便大家随时查阅:《Java设计模式宝典:从入门到精通》专栏目录地址,点击我即可快速访问到所有设计模式的章节,不漏掉一处学习的知识 [点赞]等会儿兄弟们,这篇文章的干货真的是满满的!......
  • ROS机器人入门系列(二)实现HelloWorld(c++/python)
    一、实现流程1、创建工作空间2、创建功能包3、编辑源文件4、编辑配置文件5、编译并执行其中,c++和python的差异仅体现在3,4两部,其他流程基本一致。二、创建工作空间和创建功能包的实现2.1 创建工作空间并初始化(1)创建工作空间mkdir-p自定义工作空间名称/src这里......
  • 突破编程:深入理解C++中的组合模式
    突破编程:深入理解C++中的组合模式在C++及众多面向对象编程语言中,设计模式是解决问题的经典方案,它们帮助开发者在面对复杂系统设计时,能够遵循一套经过验证的最佳实践。组合模式(CompositePattern)是这些设计模式中的一种,它提供了一种将对象组合成树形结构以表示“部分-整体”......
  • C++ 析构函数注意事项总结
    在C++中,析构函数是一个特殊的成员函数,它在对象生命周期结束时自动调用,用于执行清理工作,如释放分配给对象的内存、关闭文件、断开网络连接等。正确编写析构函数对于防止内存泄漏、资源泄露和其他资源管理问题至关重要。以下是编写C++析构函数时需要注意的一些重要事项:确保资......
  • C++类和对象(下):初始化列表、explicit关键字、友元函数、友元类
    文章目录C++类和对象9、初始化列表9.1构造函数体赋值9.2初始化列表9.3explicit(显示)关键字10、友元10.1友元函数10.2友元类C++类和对象9、初始化列表一个类的构造函数要初始化成员变量有两种方式,一种是构造函数体赋值,另一种是初始化列表。9.1构造函数体赋值......
  • 深度学习 vector 之模拟实现 vector (C++)
    1.基础框架这里我们有三个私有变量,使用_finish-_start代表_size,_end_of_storage-_start代表_capacity,并且使用到了模版,可以灵活定义存储不同类型的vector,这里将代码量较小的函数直接定义在类的内部使其成为内联函数namespacebit{ template<classT> classv......
  • 两数相加 链表C++
    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0 开头。示例1:输入:l1=[2,4,3],l2=[5,......
  • c++随机生成图画
    话不多说直接上代码:#include<bits/stdc++.h>#include<windows.h>#include<stdlib.h>#include<cstdio>#include<iostream>#include<string>#include<stdio.h>#include<ctime>#include<conio.h>#include<time.h>......
  • 【C++ Primer Plus习题】5.10
    问题:解答:#include<iostream>usingnamespacestd;intmain(){ intcount=0; cout<<"请输入星星的行数:"; cin>>count; for(inti=0;i<count;i++) { for(intj=0;j<count-i-1;j++) { cout<<&qu......
  • 【C++ Primer Plus习题】5.9
    问题:解答:#include<iostream>#include<cstring>usingnamespacestd;#defineSIZE20intmain(){ stringwords[SIZE]; stringdone="done"; intcount=0; while(true) { cout<<"请输入单词:"<<endl; c......