实习学到的一些东西(二)

最近实习一直在看公司代码框架,看到许多用到了单例模式的地方。有些是直接写一个单例模式实现,有些则是继承自一个单例模板。
因为继承自单例模板的实现方式以前没有接触过,所以这里记录一下。

1、首先声明一个单例模式模板基类:

template<class T>
class Singleton {
    public:
        static T* get() {
            static T t;
            return &t;
        }
    protected:
        //设为protected是为了以后的派生类继承它时可以调用构造函数
        Singleton() {}
        ~Singleton() {}
    private:
        //拷贝构造函数和赋值运算都不被允许
        Singleton(const Singleton& m);
        Singleton& operator=(const Singleton& m);
};

2、然后令我们想运用单例模式的类继承自这个类

注意继承类时模板参数为该类本身,这样做据说是atl-style代码,既可以节省内存(因为不需要虚函数表),且所有函数的调用在编译时确定,因此它们是可以优化的(参考博客

class DerivedSingleton : public Singleton<DerivedSingleton>  //模板参数为DerivedSingleton
{
    ... //该类的其他实现细节
};

然后就实现了单例模式啦~
这里好像没有考虑到线程安全问题,需要的话可以看看这篇博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值