3. 資源管理(條款:13-17)

來源:互聯網
上載者:User

標籤:blog   http   io   os   strong   2014   div   sp   log   

條款13: 以對象管理資源。

a. 資源流失:

#include <iostream>using namespace std;struct INT {int v;INT(int x) : v(x) { cout << "INT constructor called." << endl; }~INT() { cout << "INT deconstructor called." << endl; }};int main() {INT *tmp = new INT(6);cout << (*tmp).v << endl;cout << tmp->v << endl;}

 (沒有調用解構函式,資源在堆中沒有釋放)

b. 用對象管理資源:

template<typename T> class Resource_ptr /* 加入管理類型 Resource_ptr */{public:Resource_ptr (T *p = NULL) : r_ptr(p) { cout << "Resource_ptr constructor called;" << endl; }~Resource_ptr () { cout << "Resource_ptr deconstructor called; " << endl;if(r_ptr) delete r_ptr; }const T& operator* () const { return *r_ptr; }T& operator* () { return *r_ptr; }const T* operator-> () const { return r_ptr; }T* operator-> () { return r_ptr; }/*T* get() { return r_ptr; }*/private:T *r_ptr;};typedef Resource_ptr<INT> R_ptr;int main() {/*INT *tmp = new INT(6);*/R_ptr tmp = R_ptr(new INT(6));cout << (*tmp).v << endl;cout << tmp->v << endl;}

 (利用對象,通過 delete 調用解構函式釋放資源)

 

3. 資源管理(條款:13-17)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.