单实例(Singleton) single instance 模式

本文展示了一个使用双重检查锁定的单例模式实现示例。该模式确保了线程安全的同时,也提高了效率。通过静态内部类的方式创建单例对象,并使用synchronized关键字和锁对象来防止多线程环境下实例化多次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class pptest
    {
        private static pptest _instance = null;
        private static object lockobject = null;

        private pptest()
        {

        }
        public static pptest Instance()
        {
            if (_instance == null)
            {
                lock (lockobject)
                {
                    if (_instance == null)
                    {
                        _instance = new pptest();
                    }
                }
            }
            return _instance;
        }
    }

单例模式指在一个线程中一个类只维持一个实例, 即用户无法在外部调用 Singleton 类的构造函数(将构造函数设为 private 即可);需要提供一个 instance 接口, 用户第一次调用时构造一个实例, 之后再调用直接返回该实例即可;同时在 Singleton 类中维护变量 num 进行计数, 每次调用 instance 将 num 加一, 在销毁该实例时输出 num 值;补充代码, 完成单例模式. 额外信息:在代码框中实现注释部分代码,只需补充 /*YOUR CODES*/ 部分代码,其余复制即可。 #include <iostream> class Singleton { protected: Singleton() {} private: static int num; static Singleton* _instance; public: int test; ~Singleton(); static Singleton* instance(); }; // /*YOUR CODES*/ // Singleton* Singleton::_instance = 0; // Singleton::~Singleton() { // /*YOUR CODES*/ // } // Singleton* Singleton::instance() { // /*YOUR CODES*/ // } void case0() { Singleton* single = Singleton::instance(); delete single; } void case1() { Singleton* single = Singleton::instance(); delete single; single = Singleton::instance(); delete single; single = Singleton::instance(); delete single; } void case2() { Singleton* single = Singleton::instance(); single = Singleton::instance(); delete single; } void case3() { Singleton* single0 = Singleton::instance(); Singleton* single1 = Singleton::instance(); single0->test = 10; std::cout << (single1->test == 10) << '\n'; delete single0; } void case4() { Singleton* s = Singleton::instance(); for (int i = 0; i < 999999; i++) Singleton* single0 = Singleton::instance(); delete s; } void case5() { Singleton* s0 = Singleton::instance(); Singleton* s1 = Singleton::instance(); s0->test = 1; s0->test += s1->test; std::cout << (Singleton::instance()->test == 2) << '\n'; delete s0; } void case6() { Singleton* s = Singleton::instance(); for (int i = 0; i < 0; i++) Singleton* single0 = Singleton::instance(); delete s; } void case7() { Singleton* s0 = Singleton::instance(); Singleton* s1 = Singleton::instance(); s0->test = 2; s0->test += s1->test; std::cout << Singleton::instance()->test << '\n'; delete s0
最新发布
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值