• 对mudo中noncopyable类的理解


    假设,当前我们想禁止编译器自动生成构造函数和赋值函数

    方法很简单,我们对这两个函数进行自定义就好了

    如果我们想附加一个条件,在程序中避免使用类的调用构造函数和拷贝构造函数

    也就是禁止如下情况产生:

    class A;
    A t1, t2;
    t1.data = 10;
    t2 = t1; // 赋值函数
    // 或者
    A t2(t1); // 构造函数

    这个时候,可以通过将构造函数和赋值函数的执行权限限制为private,防止进行调用

    如下:

    class A{
      private:
        A(const A& a){...}
        A& operator= (const A& a){...}
    }

    但是,有的友元类是可以访问到private中的成员函数的,为了保证安全,可以将定义改成声明

    class A{
      private:
        A(const A& a);
        A& operator= (const A& a);
    }

    但是这样会报错,构造函数是无法合成了,但是连对象的生成都会报错

    A t1;

    解决办法是,在protected中或者public中定义构造函数

    class A{
      protected:
         A(){}
         ~A(){}
      private:
        A(const A& a);
        A& operator= (const A& a);
    };

    现在,再贴一下noncopyable类的代码就很容易理解了

    #pragma once
    // 表示只会编译一次
    // 
    class noncopyable{
      
      protected:
        noncopyable(){}
        ~noncopyable(){}
    
      private:
        noncopyable(const noncopyable&);
        const noncopyable& operator=(const noncopyable&);
    };

    我们就可以总结noncopyable类的作用了,就是在派生类能够正常定义对象,保证类中数据安全的前提下,禁止派生类编译器自动生成拷贝构造函数和拷贝赋值函数。

  • 相关阅读:
    Redis
    Redis
    Redis
    Redis
    Redis
    Redis
    Distributed
    Sentinel
    Archi
    Redis
  • 原文地址:https://www.cnblogs.com/letlifestop/p/11883792.html
Copyright © 2020-2023  润新知