Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c++ 单例模式

作者:你没有爱过我   发布日期:2025-05-07   浏览:112

#include <iostream>
#include <mutex>

class Singleton {
private:
    // 私有构造函数,防止外部实例化
    Singleton() {
        std::cout << "Singleton instance created." << std::endl;
    }

    // 删除拷贝构造函数和赋值操作符
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

    // 静态成员变量保存唯一的实例
    static Singleton* instance;

public:
    // 获取唯一实例的静态方法
    static Singleton* getInstance() {
        if (instance == nullptr) {
            std::lock_guard<std::mutex> lock(mutex_);
            if (instance == nullptr) {
                instance = new Singleton();
            }
        }
        return instance;
    }

    // 释放资源
    static void destroy() {
        if (instance != nullptr) {
            delete instance;
            instance = nullptr;
        }
    }

private:
    // 互斥锁保证线程安全
    static std::mutex mutex_;
};

// 初始化静态成员变量
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mutex_;

int main() {
    // 获取单例对象
    Singleton* singleton = Singleton::getInstance();

    // 使用完毕后销毁单例对象
    Singleton::destroy();

    return 0;
}

解释说明:

  1. 私有构造函数Singleton() 是私有的,防止外部通过构造函数创建对象。
  2. 删除拷贝构造函数和赋值操作符:确保类的对象不能被复制或赋值。
  3. 静态成员变量static Singleton* instance; 用于保存唯一的实例。
  4. 静态方法 getInstance():提供全局访问点,使用双重检查锁定模式(Double-Checked Locking Pattern)来确保线程安全。
  5. 互斥锁std::mutex mutex_; 用于在多线程环境中保证线程安全。
  6. destroy() 方法:用于手动销毁单例对象,释放资源。

这个实现方式是线程安全的,并且遵循了单例模式的基本原则。

上一篇:c++ 引用

下一篇:opencv c++

大家都在看

c++闭包

c++单引号和双引号的区别

c++ 注释

c++如何判断素数

c++ 获取系统时间

c++进制转换函数

c++ tcp

c++ gcd函数

c++ cli

c++ weak_ptr

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站