zoukankan      html  css  js  c++  java
  • 3. 资源管理(条款:13-17)

    条款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 调用析构函数释放资源)

  • 相关阅读:
    npm私服包管理-发布
    搭建npm私服
    vue.js框架搭建
    基于cropper实现图片上传,剪切,下载
    base64转图片
    获取file的路径
    如何制定好测试策略(一)
    让测试团队慢慢死去!-有同感,转载
    2016-2016自动化测试的趋势
    2016-安全性测试
  • 原文地址:https://www.cnblogs.com/liyangguang1988/p/3965161.html
Copyright © 2011-2022 走看看