您的位置:首页 > 运维架构

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

2017-08-01 11:54 351 查看
一句话总结: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<
cb44
span> 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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 C++ 多线程