单例模式

单例模式: 保证类只有一个实例,并且提供一个访问实例的全局访问点。

方法:

         保证类只有一个实例:使构造函数是private,这样就无法顺意创建类的实例

         提供一个访问实例的全局访问点:一个类的静态函数,能获取到实例。


实现代码:

1.简单版本

class singletion
{
private:
        singletion(int x=1):a(x) {}
        static singletion *p;
        int a;
public:
        int get() {return a;}
        int set(int x) { a =x;}
        static singletion* get_instance()
        {
                if (p == NULL) p = new singletion();
                return p;
        }
};
singletion* singletion::p=NULL;

int main()
{
        singletion* p = singletion::get_instance();
        cout<<p->get()<<endl;
        singletion* p2 = singletion::get_instance();
        p2->set(3);
        cout<<p->get()<<endl;
}


2.添加对内存释放

class singletion
{
public:
        int get() {return a;}
        int set(int x) { a =x;}
        static singletion* get_instance()
        {
                if (p == NULL) p = new singletion();
                return p;
        }
        class garbo   // 增加一个垃圾回收的内部类,作用仅是程序结束时,释放单例占用的内存
        {
        public:
                garbo() {}
                ~garbo()
                {
                        cout<<"delete p"<<endl;
                        delete p;
                };
        };
private:
        singletion(int x=1):a(x) {}
        static singletion *p;
        int a;
        static garbo _garbo;
};
singletion* singletion::p=NULL;
singletion::garbo singletion::_garbo; // 如果不执行构造,析构也不会执行


3.使用局部静态变量,不用考虑内存的释放问题,并且也实现了线程安全

class singletion2
{
private:
        int a;
        singletion2(int x=1):a(x) {  cout<<" single2 "<<endl; }
public:
        int get() {return a;}
        int set(int x) { a =x;}
        static singletion2* get_instance()
        {
               static singletion2 single;
                return &single;
        }
};

4.考虑线程安全

class singletion
{
public:
        int get() {return a;}
        int set(int x) { a =x;}
        static singletion* get_instance()
        {
                if (p == NULL) {
                        lock();  // C++没有直接的Lock操作,请使用其它库的Lock,比如Boost,此处仅为了说明
                        if (p == NULL) p = new singletion();
                        unlock();
                }
                return p;
        }
private:
        singletion(int x=1):a(x) {}
        static singletion *p;
        int a;
};
singletion* singletion::p=NULL;

需要考虑实例的情况:

  1. 在类中,有一些文件锁了,文件句柄,数据库连接等等,这些随着程序的关闭而不会立即关闭的资源,必须要在程序关闭前,进行手动释放;
  2. 具有强迫症的程序员。



内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值