21xrx.com
2025-03-29 21:46:41 Saturday
文章检索 我的文章 写文章
C++饿汉式单例模式
2023-07-01 06:52:30 深夜i     12     0
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()` 方法始终返回同一个对象,实现了单例模式的效果。

  
  

评论区

请求出错了