21xrx.com
2024-12-27 20:51:02 Friday
登录
文章检索 我的文章 写文章
C++饿汉式单例模式
2023-07-01 06:52:30 深夜i     --     --
C++ singleton pattern eager initialization

C++饿汉式单例模式是一种创建单例对象的方法,可以在程序一旦运行就立即创建单例对象。与懒汉式不同,不需要在第一次调用时进行初始化,从而提高了效率,避免了多线程并发访问时的线程安全问题。

下面是C++饿汉式单例模式的代码示例:


#include <iostream>

class Singleton {

public:

  static Singleton& GetInstance()

    static Singleton instance;

    return instance;

  

  void Print() World!" << std::endl;

  

private:

  Singleton() = default;

  ~Singleton() = default;

  Singleton(const Singleton&) = delete;

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

};

int main() {

  Singleton& instance1 = Singleton::GetInstance();

  Singleton& instance2 = Singleton::GetInstance();

  Singleton& instance3 = Singleton::GetInstance();

  instance1.Print(); // Output: Hello, World!

  instance2.Print(); // Output: Hello, World!

  instance3.Print(); // Output: Hello, World!

  

  std::cout << "&instance1: " << &instance1 << std::endl;

  std::cout << "&instance2: " << &instance2 << std::endl;

  std::cout << "&instance3: " << &instance3 << std::endl;

  return 0;

}

在这个示例中,`GetInstance()` 方法返回一个静态的 `Singleton` 对象,该对象在第一次访问时被初始化并存储在静态存储区中。该方法返回一个对该对象的引用。

如果你尝试在构造函数中进行其他初始化,例如打印或日志记录,你已经错过了一些东西。因为这会在程序启动时发生,而不是在后续执行中发生,因此需要注意避免与其他现有资源冲突。

在输出中,我们可以看到三个引用都指向同一个地址,这表明 `GetInstance()` 方法始终返回同一个对象,实现了单例模式的效果。

  
  

评论区

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