21xrx.com
2024-12-22 23:24:50 Sunday
登录
文章检索 我的文章 写文章
C++单例模式:懒汉和饿汉
2023-07-05 09:15:05 深夜i     --     --
C++ 单例模式 懒汉 饿汉 设计模式

C++是一种非常强大的编程语言,在软件开发中得到广泛应用。单例模式是一种设计模式,可以确保一个类只有一个实例,并提供一个全局访问点。

在C++中,实现单例模式可以使用两种方法:懒汉和饿汉。

懒汉模式是延迟加载实例的方法。当程序第一次需要使用这个类的实例时,才会创建该对象。这个方法的优点是节省了内存,因为它只有在需要时才创建实例。而缺点是可能会有多个线程同时访问,导致创建出多个实例的风险。

以下是一个懒汉模式的示例代码:


class Singleton {

private:

  static Singleton* instance;

  Singleton() {}

public:

  static Singleton* getInstance() {

    if (instance == NULL) {

      instance = new Singleton();

    }

    return instance;

  }

};

Singleton* Singleton::instance = NULL;

在这个示例中,Singleton类只有一个私有的构造函数,这样就可以防止其他类创建实例。getInstance()方法检查instance是否为NULL,如果是,则创建新的实例。getInstance()方法是为了返回单例对象而存在的,这使得我们可以使用同一个对象。

饿汉模式是预先加载实例的方法。这个模式在程序启动时就创建了实例。使用饿汉模式的优点是可以保证只有一个实例,因为它是线程安全的。缺点是可能会浪费内存资源,因为它在程序运行的过程中始终占据内存空间。

以下是一个饿汉模式的示例代码:


class Singleton {

private:

  static Singleton* instance;

  Singleton() {}

public:

  static Singleton* getInstance()

    return instance;

  

};

// 在程序启动时就创建实例

Singleton* Singleton::instance = new Singleton();

在这个示例中,Singleton类只有一个私有的构造函数,这样就防止其他类创建实例。getInstance()方法直接返回instance。instance在程序启动时就先被创建出来了,并且是静态的,这样就保证了线程安全。

总之,C++单例模式有两种实现方法:懒汉和饿汉。懒汉模式是延迟加载实例的方法,而饿汉模式是预先加载实例的方法。在具体的应用中,需要根据实际情况选择一种方法。

  
  

评论区

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