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;
}
看下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;
}
相关文章推荐
- boost学习之noncopyable
- c++ boost学习之noncopyable
- 【Boost】boost::noncopyable介绍 .
- boost::noncopyable 禁止拷贝
- 【BOOST】boost : : noncopyable 分析,拷贝构造、赋值函数
- boost::noncopyable
- boost::noncopyable 分析
- boost noncopyable
- 先来理解boost::noncopyable[1-1]
- boost::noncopyable
- boost noncopyable实现与ADL
- 无法访问 private 成员(在“boost::asio::detail::noncopyable”类中声明)
- 【Boost】boost::noncopyable介绍
- boost noncopyable
- boost noncopyable
- boost noncopyable实现禁止类拷贝
- boost学习笔记之noncopyable
- boost学习之noncopyable
- boost noncopyable实现禁止类拷贝
- boost::noncopyable学习