holyya.com
2025-09-04 08:27:08 Thursday
登录
文章检索 我的文章 写文章
C++单例模式的实现及模板应用
2023-07-13 09:11:34 深夜i     --     --
C++单例模式 实现方法 模板应用

C++单例模式是保证在一个程序中仅存在一个特定类实例的模式。在大多数情况下,我们需要保证在我们的程序中存在唯一的类实例,这时候就需要使用单例模式。在C++中,单例模式可以通过定义私有构造函数和静态私有类实例变量来实现。

下面是一个C++单例模式的实现:


class Singleton {

private:

  static Singleton* instance;

  Singleton()

    // 防止外部调用

  

public:

  static Singleton* getInstance() {

    if (instance == nullptr) {

      instance = new Singleton();

    }

    return instance;

  }

  void operation()

    // 编写具体操作的代码

  

};

Singleton* Singleton::instance = nullptr;

在上面的代码中,静态私有类实例变量"instance"以及静态获取实例的方法"getInstance"都是私有的,这可以防止外部直接创建实例,而只能通过"getInstance"方法获取实例。同时,构造函数也是私有的,这样就保证了单例模式的类实例只能由类自己创建,并且只存在一个实例。

使用该单例模式也很简单:


Singleton* s1 = Singleton::getInstance();

Singleton* s2 = Singleton::getInstance();

// "s1"和"s2"是同一个实例

上面的代码所示,只会创建一个"Singleton"的实例,"s1"和"s2"都是同一个实例。

此外,C++单例模式还可以使用模板进行封装。下面是一个具有线程安全性的单例模板:


template<class T>

class Singleton {

public:

  static T* getInstance()

    static T instance;

    return &instance;

  

  Singleton() = delete;

  Singleton(const Singleton&) = delete;

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

};

上面的代码中,"getInstance"方法中使用了静态局部变量"T instance",这可以保证线程安全。同时,通过"delete"函数声明了拷贝构造函数和拷贝赋值函数,这也可以保证单例模式的实例只有一个。

因此,上面的单例模板和前面的单例模式都是可以在C++中使用的,可以根据项目的需要进行选择。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复