scoped_array:
scoped_array的接口和功能幾乎是與scoped_ptr是相同的(甚至還有少),主要特點如下:
【1】構造函數接受的指針p必須是new[]的結果,而不能使new表達式的結果;
【2】沒有*,->操作符重載,因爲scoped_array持有的不是一個普通指針;
【3】析構函數使用delete[]釋放資源,而不是delete;
【4】提供operator[]操作符重載,可以像普通數組一樣用下標訪問元素;
【5】沒有begin() ,end()等類似容器的迭代器操作函數.
用法:
scoped_array與scoped_ptr源於相同的設計思想:它們只能在被聲明的作用域內使用,不能拷貝,賦值。
注意:
【1】scoped_array重載了operator[],因此它用起來就像一個普通的數組,但因爲它不提供指針運算,所以不能用"數組首地址+N"的方式訪問數組元素.
【2】scoped_array不提供數組索引的範圍檢查,如果使用了超過動態數組大小的索引或者負數將引發未定義行爲.
使用建議:
scoped_array的功能很有限,不能動態增長,也沒有迭代器支持,不能搭配STL算法,僅有一個純粹的"裸"數組接口,而且,應當儘量避免使用new[]操作符,它比new更可怕。
除非對性能有非常苛刻的要求,或者編譯器不支持標準庫(比如某些嵌入式操作系統),否則本書不推薦使用scoped_array,它只是爲了與老式c風格代碼兼容而使用的類,它的出現往往意味着你的代碼中存在着隱患。