shared_array
shared_array類似shared_ptr,它包裝了new[]操作符在堆上分配的動態數組,同樣使用引用計數機制爲動態數組提供了一個代理,可以在程序的生命週期里長期存在,直到沒有任何引用後才釋放內存。
shared_array的接口與功能幾乎是與shared_ptr是相同的,主要區別如下:
【1】構造函數接受的指針p必須是new[]的結果,而不能使new表達式的結果;
【2】提供operator[]操作符重載,可以像普通數組一樣用下標訪問元素;
【3】沒有 *,->操作符重載,因爲shared_array持有的不是一個普通指針;
【4】析構函數使用的delete[]釋放資源,而不是delete;
用法:
shared_array就像shared_ptr和scoped_array的結合體--即具有shared_ptr的優點,也具有scoped_array的缺點。有關shared_ptr和scoped_array的討論大都適合它.
例子:
#include <boost/smart_ptr.hpp>
#include <boost/make_shared.hpp>
using namespace boost;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int *p = new int[100];//一個動態數組
shared_array<int> sa(p);//shared_array代理動態數組
shared_array<int> saEx = sa;//共享數組,引用計數增加
sa[0] = 10;
assert(saEx[0] == 10);
return 0;
}
注意:
在使用shared_array重載的operator[]時要小心,shared_array不提供數組索引的範圍檢查,如果使用了超過動態數組大小的索引或者是負數索引將引發可怕的未定義行爲。
shared_array能力有限,多數情況下它可以用shared_ptr<std::vector>或者std::vector<shared_ptr>來代替,這兩個方案具有更好的安全性和更多的靈活性,而所付出的代價幾乎可以忽略不計.