C++11智能指標之unique_ptr

來源:互聯網
上載者:User

1. 智能指標概念

智能指標是基於RAII機制實現的類(模板),具有指標的行為(重載了operator*與operator->操作符),可以“智能”地銷毀其所指對象。C++11中有unique_ptr、shared_ptr與weak_ptr等智能指標,可以對動態資源進行管理

2. unique_ptr概念

unique_ptr“”擁有其所指對象,同一時刻只能有一個unique_ptr指向給定對象(通過禁止拷貝語義、只有移動語意來實現)。

unique_ptr指標本身的生命週期:從unique_ptr指標建立時開始,直到離開範圍。離開範圍時,若其指向對象,則將其所指對象銷毀(預設使用delete操作符,使用者可指定其他動作)。

unique_ptr指標與其所指對象的關係:在智能指標生命週期內,可以改變智能指標所指對象,如建立智能指標時通過建構函式指定、通過reset方法重新指定、通過release方法釋放所有權、通過移動語意轉移所有權。

3. unique_ptr的基本操作:

//智能指標的建立unique_ptr<int> u_i; //建立u_i.reset(new int(3)); //"綁定”動態對象unique_ptr<int> u_i2(new int(4));//建立時指定動態對象//所有權的變化int *p_i = u_i2.release(); //釋放所有權unique_ptr<string> u_s(new string("abc"));unique_ptr<string> u_s2 = std::move(u_s); //所有權轉移(通過移動語意),u_s所有權轉移後,變成“null 指標”u_s2=nullptr;//顯式銷毀所指對象,同時智能指標變為空白指標。與u_s2.reset()等價
4. unique_ptr的使用情境

void foo(){//不安全的代碼    X *px = new X;    // do something, exception may occurs    delete px; // may not go here}
void foo(){//異常安全的代碼。無論是否異常發生,只要px指標成功建立,其解構函式都會被調用,確保動態資源被釋放    unique_ptr<X> px(new X);    // do something,}

unique_ptr<X> foo(){    unique_ptr<X> px(new X);    // do something    return px; //移動語意}

方式一:

vector<unique_ptr<string>> vs { new string{“Doug”}, new string{“Adams”} };
方式二:

vector<unique_ptr<string>>v;unique_ptr<string> p1(new string("abc"));v.push_back(std::move(p1));//這裡需要顯式的移動語意,因為unique_ptr並無copy語義

    unique_ptr<int[]> p (new int[3]{1,2,3});    p[0] = 0;// 重載了operator[]
5. 自訂資源刪除操作(Deleter):

void end_connection(connection *p) { disconnect(*p); } //資源清理函數unique_ptr<connection, decltype(end_connection)*> //資源清除程式的“類型”        p(&c, end_connection);// 傳入函數名,會自動轉換為函數指標
6 auto_ptr與unique_ptr





 




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.