boost::non copyable常用于单例模式

一句话总结:C++类中4个自动生成的函数需为私有,注意线程安全。



看下boost::non copyable的定义,当继承时构造函数、析构函数、赋值函数、拷贝构造函数均默认变成私有,注意基类中的构造函数和析构函数不能为private,否则子类不可见,不能继承:

#ifndef BOOST_NONCOPYABLE_HPP_INCLUDED

#define BOOST_NONCOPYABLE_HPP_INCLUDED


namespace boost {

    

    //  Private copy constructor and copy assignment ensure classes derived from

    //  class noncopyable cannot be copied.

    

    //  Contributed by Dave Abrahams

    

    namespace noncopyable_ // protection from unintended ADL

    {

        class noncopyable

        {

        protected:

            noncopyable() {}

            ~noncopyable() {}

        private// emphasize the following members are private

            noncopyable( constnoncopyable& );

            constnoncopyable& operator=(const noncopyable& );

        };

    }

    

    typedefnoncopyable_::noncopyable noncopyable;

    

} // namespace boost  


#endif  // BOOST_NONCOPYABLE_HPP_INCLUDED


1、饿汉式单例模式是线程安全的,

class CSingleton

{

private:

    CSingleton()

    {

    }

public:

    int m;

    staticCSingleton instance; //声明

    staticCSingleton * GetInstance()

    {

        return &instance;

    }

};


CSingleton CSingleton::instance;   //初始化

2、懒汉模式需要注意线程安全,加锁

#include "pthread.h"


class Singleton

{

private:

    staticSingleton* m_instance;

    Singleton(){}

public:

    staticSingleton* getInstance();

};


pthread_mutex_t mutex;


Singleton* Singleton::getInstance()

{

    if(NULL ==m_instance)

    {

        pthread_mutex_lock(&mutex);

        if(NULL ==m_instance)

        {

            m_instance =new Singleton;

        }

        pthread_mutex_unlock(&mutex);

    }

    returnm_instance;

}




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值