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

    如果你是一个地产商,一个中介软件系统自然而然的想有一个class来描述一个房屋。

    Class HomeForSale{…};

    每一个地产商,都会说自己的房子是独一无二的,所以不允许别人复制或赋值。

    也就是说:

             HomeForSale h1;

             HomeForSale h2;

                       HomeForSale h3(h1); // 企图拷贝h1,不应该通过编译

                       H1 = h2;   //企图赋值h1,不应该通过编译

    这时我们要如何去做呢?

             如果我们不定义copy 构造函数或赋值构造函数,则编译器会为我们生成。那么这时我们要怎么办呢?

             有一个办法,我们把copy 构造函数或赋值构造函数定义为私有的。

             但是问题来了,虽然为私有的,对象不能访问,但是类的友元和成员函数是可以访问的。怎么办?我们只声明不定义。这样如果在友元或成员函数中使用copy 构造函数或赋值构造函数时,会出现一个连接错误。

             class HomeForSales{

             public :

             ...

             private:

                       HomeForSales(const HomeForSales& ); //想想为什么不写形参的名字?

                       HomeForSales& operator= (const HomeForSales&);

    }

    再想,我们是不是可以把这种错误由连接时期提前到编译时期呢?

    是可以的。

    我们可以定义这样一个类,做为一个基类。

    class Uncopyable{

             protected:

                       Uncopyable(){}

                       ~Uncopyable(){}

             private:

                       Uncopyable(const Uncopyable&);

                       Uncopyable& operator= (const Uncopyable& );

    }

    class HomeForSales : public Uncopyable{…}

  • 相关阅读:
    【七款炫酷的页面特效】
    【PHP环境-WampServer踩坑】
    【Elasticsearch在winodws系统启动报could not find java+闪退】
    【Vue-入门笔记-7】
    关于ios的光标和键盘回弹问题
    AES加密然后ajax传输数据
    文件进行MD5计算
    jqGrid 常用 总结 -2
    关于页面传参,decodeURI和decodeURIComponent
    js防抖和节流
  • 原文地址:https://www.cnblogs.com/loveyakamoz/p/2772376.html
Copyright © 2011-2022 走看看