標籤: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)