zoukankan      html  css  js  c++  java
  • 【M30】代理类

    1、考虑二维数组,在栈上分配,必须在编译时确定大小,也就是大小是常量。另外一点,C++不支持在堆上分配二维数组。怎么解决这个问题?

      二维数组可以看成,一维数组的数组。因此,可以使用代理类,Array2D的元素是Array1D,Array1D是一维数组,为了支持[][]操作,Array2D重载操作符[],Array1D重载操作符[]。

    2、区分operator[]的读写操作,考虑string,基于引用计数的string,赋值是浅拷贝,两个指针指向同一块内存。通过[]获取string中的字符,如果只是读取,没有关系,还可以共享。如果是写操作,必须做一个副本。因此,对于[],需要想办法区分是读操作还是写操作。

    3、string中的字符不再使用char,使用代理类CharProxy,为了让CharProxy和char在使用效果上保持一致,提供隐式类型转换(char转换为CharProxy)和隐式类型转换操作符(CharProxy转化为char),CharProxy的copy赋值是写操作,CharProxy的隐式类型转换操作符是读操作。

    4、代理类还有一个典型用处,那就是禁止隐式类型转换。隐式类型转换只能进行一次,增加一个代理类,就能禁止隐式类型转换。

  • 相关阅读:
    verilog中timescale
    [shell] if语句用法
    makefile编写
    linux下压缩解压缩命令
    python获取文件所在目录
    gvim 技巧
    vcs编译verilog/sysverilog并执行
    verilog中signed的使用
    [leetcode]_String to Integer (atoi)
    [leetcode]_Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3643451.html
Copyright © 2011-2022 走看看