真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Boost庫(kù)中scoped_array

1、scoped_array

專(zhuān)注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)凌河免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

  是專(zhuān)門(mén)對(duì)數(shù)組空間進(jìn)行管理的。包裝了new[]在堆上分配的動(dòng)態(tài)數(shù)組;

  scoped_array彌補(bǔ)了標(biāo)準(zhǔn)庫(kù)中沒(méi)有指向數(shù)組的智能指針的缺憾。

2、此類(lèi)特點(diǎn)如下:

  (1)、構(gòu)造函數(shù)接受的指針p必須是new[]的結(jié)果,不能是new;

  (2)、沒(méi)有*、->操作符的重載(庫(kù)中不提供這些的重載,但是我們可以自己寫(xiě)),因?yàn)閟coped_array所持有的不是一個(gè)普通的指針;

  (3)、析構(gòu)則必須用delete [];

  (4)、提供operator[]的重載,可以像普通數(shù)組一樣進(jìn)行下標(biāo)訪問(wèn)元素;

  (5)、沒(méi)有begin()、end()等類(lèi)似容器的迭代器操作函數(shù);

  scoped_array與scoped_ptr有相同的設(shè)計(jì)思想,也是局部智能指針,不能拷貝和賦值;

3、怎么使用scoped_array

#include
#include //內(nèi)部實(shí)現(xiàn)好的,直接調(diào)用系統(tǒng)的。
using namespace std;
using namespace boost;  //這個(gè)命名空間必須要有。

int main(void){
    int *p = new int[10];  //申請(qǐng)數(shù)組空間
    scoped_array ps(p); //交與智能指針管理

    for(int i = 0; i < 10; i++){
        ps[i] = i+1;  //可以進(jìn)行下標(biāo)操作
    }
    for(i = 0; i < 10; i++){
        cout<

4、scoped_array源碼的實(shí)現(xiàn)

#include
using namespace std;

template
class scoped_array{
public:
    explicit scoped_array(T *p = 0) : px(p){} //預(yù)防隱式調(diào)用
    ~scoped_array(){
        delete []px;
    }
public:
    typedef scoped_array this_type;
    void reset(T *p = 0){ //重置方法
        this_type.swap(*this);//無(wú)名臨時(shí)對(duì)象
    }
    void swap(scoped_array &b){
        T *tmp = b.px;
        b.px = px;
        px = tmp;
    }
    T* get()const{
        return px;
    }
    T& operator[](int i)const{ //下標(biāo)越界沒(méi)有檢測(cè)
        //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 &);//放到私有中,外界無(wú)法調(diào)用
    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 ps(p);

    *ps = 2;

    for(int i = 0; i < 10; i++){
        ps[i] = i+1;
    }
    *(ps + 3) = 100; //利用 + ,*的運(yùn)算符的重載即可以實(shí)現(xiàn)。
    for(i = 0; i < 10; i++){
        cout<

庫(kù)中沒(méi)有提供*和+的重載。

scoped_array缺點(diǎn):

  不能動(dòng)態(tài)增長(zhǎng),沒(méi)有迭代器支持,不能搭配STL算法,是純粹的裸接口,不推薦使用。


分享文章:Boost庫(kù)中scoped_array
網(wǎng)站地址:http://weahome.cn/article/ghspsh.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部