boost::noncopyable 分析
来源:互联网 发布:linux查看javahome 编辑:程序博客网 时间:2024/06/06 12:43
取自boost1.61
boost::noncopyable实现了noncopyable的语义,可以通过继承它来使用,下面是它的实现:
namespace 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:#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS) BOOST_CONSTEXPR noncopyable() = default; ~noncopyable() = default;#else noncopyable() {} ~noncopyable() {}#endif#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) noncopyable( const noncopyable& ) = delete; noncopyable& operator=( const noncopyable& ) = delete;#else private: // emphasize the following members are private noncopyable( const noncopyable& ); noncopyable& operator=( const noncopyable& );#endif };}typedef noncopyable_::noncopyable noncopyable;} // namespace boost</span>实现中通过protected的构造函数来说明类要通过继承来使用的语义和限制的拷贝和赋值来说明noncopyable的语义,并提供了c++03和c++11的版本。
当我看到这个实现的时候,有这个疑问:
针对c++03的实现,只是声明了拷贝和赋值,没有定义,这样已经可以实现noncopyable的语义了,为什么还要加上private?为什么对c++11的实现没有限定为private?
我想是因为从类的使用者角度来讲,如果没有限定为private,不会一目了然的明确类是不可拷贝和赋值的,而且如果使用了拷贝和赋值语义,将会是一个运行时错误,如果限定了private, 就是个编译期的错误,也会明确的知道类是不可拷贝和赋值,对此作者也添加了注释: emphasize the following members are private,而对于c++11的实现,就不需要多此一举,一个delete搞定,非常明确的不可拷贝和赋值的语义,如果不小心拷贝和赋值了,也会是一个编译期错误。
0 0
- boost::noncopyable 分析
- boost::noncopyable
- boost noncopyable
- boost::noncopyable
- boost noncopyable
- boost::noncopyable
- boost noncopyable
- boost::noncopyable
- boost::noncopyable
- boost::noncopyable
- boost::noncopyable
- boost::noncopyable
- boost::noncopyable
- boost noncopyable
- boost::noncopyable
- 【BOOST】boost : : noncopyable 分析,拷贝构造、赋值函数
- 【Boost】boost::noncopyable介绍
- 【Boost】boost::noncopyable介绍
- 踩坑[INSTALL_FAILED_PERMISSION_LEVEL_DOWNGRADE]
- Hadoop 词频权重公式
- python的debug调试工具pdb学习
- Android studio 2.0 的安装的全程截图,手把手教学,亲自实践。
- 排序算法总结(5)——希尔排序
- boost::noncopyable 分析
- XssAPP开源,Xss跨站脚本攻击测试平台(JAVA开发) BY:WebSOS
- Failed to download samples index, please check your connection and try again
- Setting up Systemd on Debian in 10 minutes
- Permute the array according to the given permutation.
- *leetcode #115 in cpp
- Java web项目代码结构
- leetcode #116 in cpp
- leetcode #117 in cpp