zoukankan      html  css  js  c++  java
  • 若不想使用编译器自动生成的函数,就该明确拒绝

    //有些情况下,想要明确地拒绝对象之间的拷贝,可以采用两种方式:
    //方式1: 将拷贝构造函数和赋值操作声明为private,且不去实现
    class A
    {
    private:
        A(const A&);
        A& operator=(const A&);
    };
    
    int main()
    {
        A a1;    //报错:没有默认的构造函数, 一旦存在自定义的构造函数,即使是copy构造函数,编译器也不再会生成默认构造函数了.
        A a2 = a1;  //报错:拷贝构造函数不可访问.return 0;
    }

    //方式2: 去继承一个拷贝构造函数和赋值运算符函数为private的基类
    class Uncopyable
    {
    private:
    //protected:    //当以下两个函数为非private时,下面Test中操作不会报错.
        Uncopyable(const Uncopyable&);
        Uncopyable& operator=(const Uncopyable&);
    protected:
        Uncopyable();
        ~Uncopyable();
    };
    
    class B : private Uncopyable
    {
    
    };
    
    void Test()
    {
        B b1;
        B b2;
        b2 = b1;    //报错:无法引用赋值操作;   这个才是调用的赋值操作符
        B b3 = b1;    //报错:无法引用拷贝构造函数;   注意此时调用的拷贝构造函数
    }
    
    
    
    
    
    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    查看当前系统的shell
    xargs命令,作用雷同|
    shell 行末尾的&含义
    apt-get 安装及卸载,dpkg查询安装文件
    Linux: mv and cp 拷贝不包含目录
    windows下远程连接ubunut
    Linux 清空屏幕
    PageHelper的一些属性设置
    HttpServletRequest
    铁电RAM为何比串行SRAM更好
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/12238434.html
Copyright © 2011-2022 走看看