先来理解boost::noncopyable[1-1]
2014-05-13 10:22
447 查看
1、先来理解boost::noncopyable
(说明:http://blog.csdn.net/ygm_linux/article/details/25651327博客知道了,子类中实现了拷贝构造和赋值函数,则调用子类的拷贝构造和赋值函数; 子类中没有实现拷贝构造和赋值函数:则采取默认的流程。首先调用父类的拷贝构造函数。然后调用子类系统的拷贝构造函数,首先调用父类的赋值重载函数,然后调用子类系统的赋值重载函数。)
class noncopyable的基本思想是noncopyable把复制构造函数和复制赋值函数做成了private,这就意味着除非子类定义自己的copy构造和赋值函数,否则在子类没有定义的情况下,外面的调用者是不能够通过赋值和copy构造等手段来产生一个新的子类对象的。
示例:
(说明:http://blog.csdn.net/ygm_linux/article/details/25651327博客知道了,子类中实现了拷贝构造和赋值函数,则调用子类的拷贝构造和赋值函数; 子类中没有实现拷贝构造和赋值函数:则采取默认的流程。首先调用父类的拷贝构造函数。然后调用子类系统的拷贝构造函数,首先调用父类的赋值重载函数,然后调用子类系统的赋值重载函数。)
class noncopyable的基本思想是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
示例:
#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; }
相关文章推荐
- 【Boost】boost::noncopyable介绍
- 初探boost之noncopyable学习笔记
- boost::noncopyable
- boost::noncopyable
- boost::noncopyable
- boost学习之noncopyable
- boost::noncopyable 禁止拷贝
- boost/noncopyable.hpp
- Boost 实用工具:noncopyable、BOOST_BINARY宏、BOOST_CURRENT_FUNCTION宏、bitset类型
- boost noncopyable
- boost::non copyable常用于单例模式
- boost::noncopyable
- 【BOOST】boost : : noncopyable 分析,拷贝构造、赋值函数
- boost学习之noncopyable
- 【Boost】boost::noncopyable介绍
- 无法访问 private 成员(在“boost::asio::detail::noncopyable”类中声明)
- boost noncopyable实现禁止类拷贝
- boost-实用工具:noncopyable、optional、assign
- boost::noncopyable
- boost::noncopyable学习