智能指針 scoped_array

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風格代碼兼容而使用的類,它的出現往往意味着你的代碼中存在着隱患。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章