天天看點

【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、代理類還有一個典型用處,那就是禁止隐式類型轉換。隐式類型轉換隻能進行一次,增加一個代理類,就能禁止隐式類型轉換。