1、scoped_array

是專門對數組空間進行管理的。包裝了new[]在堆上分配的動態數組;
scoped_array彌補了標準庫中沒有指向數組的智能指針的缺憾。
2、此類特點如下:
(1)、構造函數接受的指針p必須是new[]的結果,不能是new;
(2)、沒有*、->操作符的重載(庫中不提供這些的重載,但是我們可以自己寫),因為scoped_array所持有的不是一個普通的指針;
(3)、析構則必須用delete [];
(4)、提供operator[]的重載,可以像普通數組一樣進行下標訪問元素;
(5)、沒有begin()、end()等類似容器的迭代器操作函數;
scoped_array與scoped_ptr有相同的設計思想,也是局部智能指針,不能拷貝和賦值;
3、怎么使用scoped_array
#include<iostream>
#include<boost/smart_ptr.hpp> //內部實現好的,直接調用系統的。
using namespace std;
using namespace boost; //這個命名空間必須要有。
int main(void){
int *p = new int[10]; //申請數組空間
scoped_array<int> ps(p); //交與智能指針管理
for(int i = 0; i < 10; i++){
ps[i] = i+1; //可以進行下標操作
}
for(i = 0; i < 10; i++){
cout<<ps[i]<<" ";
}
cout<<endl;
}
//拷貝構造和賦值都不可以。4、scoped_array源碼的實現
#include<iostream>
using namespace std;
template<class T>
class scoped_array{
public:
explicit scoped_array(T *p = 0) : px(p){} //預防隱式調用
~scoped_array(){
delete []px;
}
public:
typedef scoped_array<T> this_type;
void reset(T *p = 0){ //重置方法
this_type.swap(*this);//無名臨時對象
}
void swap(scoped_array &b){
T *tmp = b.px;
b.px = px;
px = tmp;
}
T* get()const{
return px;
}
T& operator[](int i)const{ //下標越界沒有檢測
//return *(px+i);
return px[i];
}
T& operator*()const{
return px[0];
}
T* operator+(int i)const{
return px+i;
}
private:
T *px;
scoped_array(scoped_array const &);//放到私有中,外界無法調用
scoped_array& operator=(scoped_array const &);
void operator==(scoped_array const &)const;
void operator!=(scoped_array const &)const;
};
int main(void){
int *p = new int[10];
scoped_array<int> ps(p);
*ps = 2;
for(int i = 0; i < 10; i++){
ps[i] = i+1;
}
*(ps + 3) = 100; //利用 + ,*的運算符的重載即可以實現。
for(i = 0; i < 10; i++){
cout<<ps[i]<<" ";
}
cout<<endl;
}庫中沒有提供*和+的重載。
scoped_array缺點:
不能動態增長,沒有迭代器支持,不能搭配STL算法,是純粹的裸接口,不推薦使用。
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
文章名稱:Boost庫中scoped_array-創新互聯
分享鏈接:http://www.js-pz168.com/article34/dgojpe.html
成都網站建設公司_創新互聯,為您提供網站改版、網站內鏈、App開發、網站營銷、關鍵詞優化、小程序開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯