zoukankan      html  css  js  c++  java
  • boost::noncopyable介绍

    http://blog.csdn.net/huang_xw/article/details/8248960#

    boost::noncopyable比较简单, 主要用于单例的情况.
    通常情况下, 要写一个单例类就要在类的声明把它们的构造函数赋值函数析构函数, 复制构造函数隐藏到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
    #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;
    }
  • 相关阅读:
    English,The Da Vinci Code, Chapter 23
    python,meatobject
    English,The Da Vinci Code, Chapter 22
    English,The Da Vinci Code, Chapter 21
    English,The Da Vinci Code, Chapter 20
    English,The Da Vinci Code, Chapter 19
    python,xml,ELement Tree
    English,The Da Vinci Code, Chapter 18
    English,The Da Vinci Code, Chapter 17
    English,The Da Vinci Code, Chapter 16
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/6659613.html
Copyright © 2011-2022 走看看