21xrx.com
2024-12-22 21:03:04 Sunday
登录
文章检索 我的文章 写文章
C++实现单例模式
2023-07-08 01:13:04 深夜i     --     --
C++ 单例模式 实现

单例模式是一种很常见的设计模式,它的作用是保证一个类仅有一个实例,同时提供一个全局访问点。在C++中,单例模式可以通过多种方式实现,下面介绍其中一种常用的实现方法。

首先,定义一个类的静态成员变量指针,用来存储唯一的实例。在类的构造函数中判断指针是否为空,如果为空就创建一个实例;否则返回已存在的实例。为了防止多线程并发访问引起的问题,需要在创建实例时加锁,释放锁时判断指针是否为空,如果为空才释放锁。这样能保证线程安全,避免了多个线程同时创建实例的问题。

接下来,需要禁止复制构造函数和赋值运算符,确保单例模式的唯一性。可以将复制构造函数和赋值运算符设为private,并且不实现。这样即使有其他代码试图复制或者赋值这个类的实例,也会被禁止。

示例代码如下:


class Singleton {

public:

  static Singleton* getInstance() {

    if (instance == nullptr) {

      std::lock_guard<std::mutex> lock(m_mutex);

      if (instance == nullptr) {

        instance = new Singleton();

      }

    }

    return instance;

  }

private:

  Singleton() { }

  ~Singleton() { }

  static Singleton* instance;

  static std::mutex m_mutex;

public:

  Singleton(const Singleton&) = delete;

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

};

Singleton* Singleton::instance = nullptr;

std::mutex Singleton::m_mutex;

在这个例子中,使用了std::mutex来保证线程安全,同时将复制构造函数和赋值运算符设为了delete,避免了类的复制和赋值。

总之,单例模式是一个很有用的设计模式,可以帮助我们处理全局变量和单例对象等场景。在C++中,多种方法可以实现单例模式,这里仅仅介绍其中一种较为常用的方法,希望能够帮助大家更好地理解和应用单例模式。

  
  

评论区

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