Boost源码学习三[实用工具](1)
来源:互联网 发布:编程需要英语吗 编辑:程序博客网 时间:2024/05/16 14:52
这一节是一些比较实用的小工具,功能单纯,代码也简单。
先学习的第一个就是noncopyable:
#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
第一个例子:
class noncopyable { protected: noncopyable()=default;//默认的构造函数和析构函数是保护的 ~noncopyable()=default;//使用默认实现 private: // emphasize the following members are private;使用delete关键字禁止拷贝构造和拷贝赋值 noncopyable( const noncopyable& )=delete; const noncopyable& operator=( const noncopyable& )=delete; };
第二个例子:
boost::noncopyable比较简单, 主要用于单例的情况.
通常情况下, 要写一个单例类就要在类的声明把它们的构造函数, 赋值函数, 析构函数, 复制构造函数隐藏到private或者protected之中, 每个类都这么做麻烦.
有noncopyable类, 只要让单例类直接继承noncopyable.
class noncopyable的基本思想是把构造函数和析构函数设置protected权限,这样子类可以调用,但是外面的类不能调用,那么当子类需要定义构造函数的时候不至于通不过编译。但是最关键的是noncopyable把复制构造函数和复制赋值函数做成了private,这就意味着除非子类定义自己的copy构造和赋值函数,否则在子类没有定义的情况下,外面的调用者是不能够通过赋值和copy构造等手段来产生一个新的子类对象的。
#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);// errorreturn 0;}
0 0
- Boost源码学习三[实用工具](1)
- Boost源码学习三[实用工具](2)
- Boost源码学习三[实用工具](3)
- Boost源码学习三[实用工具](4)
- Boost实用工具
- boost 实用工具
- Boost源码学习十一[并发编程](1)
- Boost库学习笔记-----------实用工具之禁止复制 noncopyable
- Boost组件实用工具
- (三)boost::lambda源码分析
- Boost学习 (三) Weak_ptr instrsive_ptr
- boost 库实用工具之optional
- boost库实用工具之assign
- boost实用工具之tribool库
- boost库实用工具之exception
- Boost源码学习---scoped_ptr.hpp
- Boost源码学习---scoped_array.hpp
- Boost源码学习---shared_ptr.hpp
- IOS开发 使用地图 MapKit
- Java之美[从菜鸟到高手演变]之设计模式
- 鸟哥的Linux私房菜(基础篇)-第二章、 Linux 如何学习(二.1. Linux当前的应用角色)
- Reflection:一个反射工具包ReflectionUtils
- 解决下拉菜单被下方焦点图覆盖问题
- Boost源码学习三[实用工具](1)
- 给论文加超过10的圆形脚注
- Android中的Selector的使用方法
- Servlet中文参数乱码问题
- poj 2673 Kicc Wants to Move a Mountain! 模拟水题
- mssql有趣的注入
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”
- zookeeper能干什么
- tolua总结(一)