Boost库中scoped_array-创新互联

1、scoped_array

10年积累的成都网站设计、网站制作、外贸星空体育app最新版本(2024已更新)建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有民丰免费网站建设让你可以放心的选择与我们合作。

 是专门对数组空间进行管理的。包装了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-创新互联
分享链接:/article34/dgojpe.html

成都网站建设公司_创新互联,为您提供网站改版网站内链App开发网站营销关键词优化小程序开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

营销型网站建设