首页 > 编程语言 >C++单例基类

C++单例基类

时间:2024-03-20 15:44:22浏览次数:27  
标签:Singleton getInstance C++ 单例 基类 MyClass

在C++中实现单例模式可以使用模板和C++11的特性来达到目的。下面是一个简单的示例代码:

#include <iostream>

template <typename T>
class Singleton {
public:
    static T& getInstance() {
        static T instance;
        return instance;
    }

    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

protected:
    Singleton() {}
};

class MyClass : public Singleton<MyClass> {
    // 可以在这里添加自定义代码
public:
    void doSomething() {
        std::cout << "Doing something..." << std::endl;
    }
};

int main() {
    MyClass& instance = MyClass::getInstance();
    instance.doSomething();

    return 0;
}

以上代码实现了一个模板类 Singleton,其他类如果继承了这个基类,就会成为一个单例。在 main 函数中,通过 MyClass::getInstance() 获取 MyClass 的唯一实例,并调用其中的方法。

Singleton 模板类中,通过静态成员函数 getInstance() 返回类的唯一实例,利用了局部静态变量的线程安全特性来实现单例。同时,禁用了复制构造函数和赋值操作符,确保单例对象不会被复制或赋值。

这样设计的好处是,任何继承自 Singleton 的类都可以方便地实现单例模式,而不需要重复编写单例模式的逻辑。

标签:Singleton,getInstance,C++,单例,基类,MyClass
From: https://www.cnblogs.com/music-liang/p/18085386

相关文章

  • C++单例基类
    要实现一个安全的C++单例基类,确保子类不会随便覆盖单例行为,我们可以使用一种技巧,即CRTP(CuriouslyRecurringTemplatePattern)。这种模式使得基类能够访问派生类的私有和保护成员,从而允许我们在基类中实现单例逻辑,并且保证派生类不会破坏这个逻辑。以下是一个使用CRTP实现的单例......
  • Python设计模式,可以采用单例模式+工厂方法吗?
    背景:今天看卡尔的设计模式,突然间,觉得可以把单例模式+工厂方法结合起来。不知道能不能行,咨询下AI,觉得可以。就mark一下问题:python中我有一个项目,有4个场景,我想创建一个基类,然后写4个具体实现的工厂,并继承这个基类,我为了防止这个基类创建多次,我是不是可以用单例模式?也就说我可......
  • 美国政府敦促开发者:停止使用 C、C++
    “C、C++不安全,新应用开发时就别用了,旧应用应该采取迁移行动”,近日,美国白宫国家网络主任办公室(ONCD)在一份主题为《回到基础构件:通往安全软件之路》的19页PDF报告中强烈呼吁道。其直言,C和C++这几种编程语言既缺乏与内存安全相关的特性,又在关键系统中大量使用,可......
  • C/C++开发问题总结
    1.结构体sizeof问题Linux支持指定结构体比特字段,Windows不支持指定结构体比特字段structindex{longlongstart=0;longlongend=0;unsignedlonglongix=0;shortsegment=0;unsignedshortt:2;unsignedlonglongseq:(64-18);......
  • C++ 函数重载
    一组函数,函数名相同。函数的参数类型或参数个数不同,那么这一组函数就称作函数重载。C++为什么支持函数重载?C++代码产生函数符号的时候,是由函数名+参数列表组成的;C代码产生函数符号的时候,是由函数名来决定;函数重载需要注意什么?一组函数如果是重载函数,一定是处于同一作用......
  • C++ 泛型编程
    1.函数模板假设我们设计一个交换两个整型变量的值的函数,代码如下://交换两个整型变量的值的Swap函数:voidSwap(int&x,int&y){inttmp=x;x=y;y=tmp;}如果是浮点类型的变量的值交换,则替换int类型为double即可,代码如下://交换两个double型变量......
  • C++ Qt开发:QUdpSocket实现组播通信
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QUdpSocket组件实现基于UDP的组播通信。组播是一种一对多的通信方式,允许一个发送者将数......
  • C++ string和const char*
    两种方式的函数声明如下:voidfunc(constchar*s);voidfunc(conststd::string&s);当实参是string时:voidfuncstr(conststd::string&s){ std::cout<<s;}voidfuncchar(constchar*s){ std::cout<<s;}intmain(){ std::strings("f......
  • C++:基本知识
    ......
  • 单例模式
    TS实现单例模式classAxios{//由于instance是一个静态属性,它会在整个应用程序的生命周期内保持存在,除非显式地将其设置为null或通过其他方式清除它的引用。privatestaticinstance:Axios|null=nullurl:stringtimeout:number//通过把构造函数设为私......