【Boost】boost::noncopyable介绍
来源:互联网 发布:淘宝代运营哪家好 编辑:程序博客网 时间:2024/05/22 08:11
boost::noncopyable比较简单, 主要用于单例的情况.
通常情况下, 要写一个单例类就要在类的声明把它们的构造函数, 赋值函数, 析构函数, 复制构造函数隐藏到private或者protected之中, 每个类都这么做麻烦.
有noncopyable类, 只要让单例类直接继承noncopyable.
class noncopyable的基本思想是把构造函数和析构函数设置protected权限,这样子类可以调用,但是外面的类不能调用,那么当子类需要定义构造函数的时候不至于通不过编译。但是最关键的是noncopyable把复制构造函数和复制赋值函数做成了private,这就意味着除非子类定义自己的copy构造和赋值函数,否则在子类没有定义的情况下,外面的调用者是不能够通过赋值和copy构造等手段来产生一个新的子类对象的。
通常情况下, 要写一个单例类就要在类的声明把它们的构造函数, 赋值函数, 析构函数, 复制构造函数隐藏到private或者protected之中, 每个类都这么做麻烦.
有noncopyable类, 只要让单例类直接继承noncopyable.
class noncopyable的基本思想是把构造函数和析构函数设置protected权限,这样子类可以调用,但是外面的类不能调用,那么当子类需要定义构造函数的时候不至于通不过编译。但是最关键的是noncopyable把复制构造函数和复制赋值函数做成了private,这就意味着除非子类定义自己的copy构造和赋值函数,否则在子类没有定义的情况下,外面的调用者是不能够通过赋值和copy构造等手段来产生一个新的子类对象的。
- #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( const noncopyable& );
- const noncopyable& operator=( const noncopyable& );
- };
- }
- typedef noncopyable_::noncopyable noncopyable;
- } // namespace boost
- #endif // BOOST_NONCOPYABLE_HPP_INCLUDED
#ifndef BOOST_NONCOPYABLE_HPP_INCLUDED#define BOOST_NONCOPYABLE_HPP_INCLUDEDnamespace boost {// Private copy constructor and copy assignment ensure classes derived from// class noncopyable cannot be copied.// Contributed by Dave Abrahamsnamespace noncopyable_ // protection from unintended ADL{ class noncopyable { protected: noncopyable() {} ~noncopyable() {} private: // emphasize the following members are private noncopyable( const noncopyable& ); const noncopyable& operator=( const noncopyable& ); };}typedef noncopyable_::noncopyable noncopyable;} // namespace boost#endif // BOOST_NONCOPYABLE_HPP_INCLUDED示例:
- #include "tfun.h"
- class myclass: public boost::noncopyable
- {
- public:
- myclass(){};
- myclass(int i){};
- };
- int main()
- {
- myclass cl1();
- myclass cl2(1);
- // myclass cl3(cl1); // error
- // myclass cl4(cl2); // error
- return 0;
- }
转载地址:http://blog.csdn.net/huang_xw/article/details/8248960
0 0
- 【Boost】boost::noncopyable介绍
- 【Boost】boost::noncopyable介绍
- 【Boost】boost::noncopyable介绍
- 【Boost】boost::noncopyable介绍 .
- 【Boost】boost::noncopyable介绍
- 【Boost】boost::noncopyable介绍
- Boost】boost::noncopyable介绍
- 【Boost】boost::noncopyable介绍
- boost::noncopyable
- boost noncopyable
- boost::noncopyable
- boost noncopyable
- boost::noncopyable
- boost noncopyable
- boost::noncopyable
- boost::noncopyable
- boost::noncopyable
- boost::noncopyable
- javascript DOM编程艺术学习笔记(5)通过DOM来设置样式案例
- vs2010+matlab R2013a+win7 32bit 混合编程
- java 多线程之join
- 程序员必读经典书籍
- 1011. A+B和C (15)
- 【Boost】boost::noncopyable介绍
- C语言中无符号扩展和带符号扩展知识讲解
- DELPHI分别连接MS SQLSERVER、Oracle和ACCESS数据库的连接字符串(备用)
- 070001 KANO模型
- 第二批要买的书
- Myeclipse更改jsp默认编码
- Android平台下的一些常用知识
- python安装setuptools(easy_install工具)
- Flex 验证邮箱地址