一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C++ 沉思錄——句柄——智能指針改寫

 wtkc 2014-10-25

  C++ 沉思錄也算是C++中的經(jīng)典書籍,其中介紹OO思想的我覺得很好,但是全書中貫穿了handle,使用引用計數(shù)等,也有點不適合現(xiàn)代C++的設計思想。這里使用shared_ptr 智能指針改寫了“句柄”這一章的程序,明顯使代碼量下降,而且管理方便。下面來看代碼:

復制代碼
#include <iostream>
#include <memory>
using namespace std;

class Point{
public:
    Point() : xval(0),yval(0){};
    Point(int x, int y): xval(x), yval(y){};
    Point(const Point & p)
    {
        if(this == &p)
            return ;
        this->xval = p.x();
        this->yval = p.y();
    }
    int x() const {return xval;};
    int y() const {return yval;};
    Point& x(int xv) 
    { 
        xval = xv; 
        return *this;
    };
    Point& y(int yv) 
    { 
        yval = yv; 
        return *this;
    };
private:
    int xval, yval;
};

class Handle{                       //句柄類
public:
    Handle(): up(new Point){};
    Handle(int x,int y): up(new Point(x,y)){};//按創(chuàng)建Point的方式構造handle,handle->UPoint->Point
    Handle(const Point& p): up(new Point(p)){};//創(chuàng)建Point的副本
    Handle(const Handle& h): up(h.up){ /*++up->u;*/ };//此處復制的是handle,但是底層的point對象并未復制,只是引用計數(shù)加1
    Handle& operator=(const Handle& h)
    {
        up = h.up;
        return *this;
    };
    ~Handle()
    {
    };
    int x() const{return up->x();};
    Handle& x(int xv)
    {
        up->x(xv); 
        return *this;
    };

    int y() const{return up->y();};

    Handle& y(int yv)
    {
        up->y(yv); 
        return *this;
    };
    int OutputU()
    {
        return up.use_count();
    }   //輸出引用個數(shù)
private:
    shared_ptr<Point> up;
};

int main()
{
    //Point *p = new Point(8,9); 
    Point p(8,9);
    //Point p1 = p.x(88);
    //Point *pp = &p;
    Handle h1(1,2);
    Handle h2 = h1;        //此處調(diào)用的是構造函數(shù)Handle(const Handle& h)
    h2.x(3).y(4);               //此處的特殊寫法是因為寫xy函數(shù)內(nèi)返回了對象
    Handle h3(5,6);        //此處調(diào)用Handle的賦值運算符重載函數(shù)Handle& operator=(const Handle& h)
    h1 = h3;
    Handle h4(p);
    Handle h5(h4);
    h4.x(7).y(8);
    //Handle h5(p1);
    //Handle h5 = h4;
    cout <<"h1(" << h1.x() <<":"<< h1.y() << "):" << h1.OutputU() <<endl;
    cout <<"h2(" << h2.x() <<":"<< h2.y() << "):" << h2.OutputU() <<endl;
    cout <<"h3(" << h3.x() <<":"<< h3.y() << "):" << h3.OutputU() <<endl;
    cout <<"h4(" << h4.x() <<":"<< h4.y() << "):" << h4.OutputU() <<endl;
    cout <<"h5(" << h5.x() <<":"<< h5.y() << "):" << h5.OutputU() <<endl;
    //delete pp; //不能這樣,不是用new分配的空間
    //cout <<"h5(" << h5.x() <<":"<< h5.y() << "):" << h5.OutputU() <<endl;
    cout<<p.x()<<" "<<p.y()<<endl;
    //cout<<&p1<<endl;
    return 0;
}
復制代碼

運行結果:

C:\Windows\system32\cmd.exe /c handle_sharedptr.exe
h1(5:6):2
h2(3:4):1
h3(5:6):2
h4(7:8):2
h5(7:8):2
8 9
Hit any key to close this window...

可見這里的結果和“句柄”這里的完全一樣。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    91人妻久久精品一区二区三区| 97人妻人人揉人人躁人人| 久久精品国产亚洲av麻豆尤物| 加勒比日本欧美在线观看| 亚洲中文字幕在线乱码av| 91久久精品国产一区蜜臀| 日韩女优精品一区二区三区| 一区二区三区国产日韩| 欧美精品久久一二三区| 国产美女网红精品演绎| 欧美自拍偷自拍亚洲精品| 亚洲日本韩国一区二区三区| 亚洲色图欧美另类人妻| 最新午夜福利视频偷拍| 日本少妇三级三级三级| 午夜精品在线视频一区| 国产对白老熟女正在播放| 色综合久久超碰色婷婷| 国产农村妇女成人精品| 成人精品视频在线观看不卡| 福利视频一区二区三区| 国产传媒中文字幕东京热| 综合久综合久综合久久| 国产免费一区二区三区av大片| 国产成人精品一区二区在线看| 99久久国产精品成人观看| 九九视频通过这里有精品| 91日韩欧美中文字幕| 午夜福利视频偷拍91| 黄色片一区二区在线观看| 大胆裸体写真一区二区| 久久99这里只精品热在线| 久久精品蜜桃一区二区av| 国产欧美日韩不卡在线视频| 午夜福利视频日本一区| 精品久久久一区二区三| 色婷婷视频国产一区视频| 亚洲成人久久精品国产| 国产成人精品视频一二区| 在线播放欧美精品一区| 白丝美女被插入视频在线观看|