zoukankan      html  css  js  c++  java
  • (原)C++智能指针——释放器(in linux, g++)

    我的记录:

    1.指定了释放器,就不会去直接调用析构函数。因为释放器就一个。不指定的话析构函数就是释放器.

    2.STL智能指针对内置内型的支持不如class:比如shared_ptr<char> s(new char[10]); memset(s, 0x00, 10);//error! 只能memset(s.get(), ....了。

    3. auto_ptr不能指定释放器.

    #include "iostream"
    #include <tr1/memory>
    
    using namespace std;
    using std::tr1::shared_ptr;
    using std::auto_ptr;
    
    class C
    {
    public:
    	C()
    	{ 
    		cout<<"C()"<<endl;  
    		buf = new char[10];
    	}
    	~C()
    	{ 
    		cout<<"~C()"<<endl;  
    		if(buf)
    		{
    			cout<<"~C() delete []buf."<<endl; 
    			delete [] buf;
    		}
    	}
    	static void MyRelease(C * pC)
    	{
    		cout<<"MyRelease()"<<endl;
    		cout<<"MyRelease() delete [] buf."<<endl;
    		delete [] pC->buf;
    		pC->buf = NULL;
    		cout<<"MyRelease() delete C:";
    		delete pC;//call ~C().
    	} 
    
    private:
    	char * buf;
    };
    
    int main()
    {
    	cout<<"std::tr1::shared_ptr<C>:"<<endl;
    	{
    		C * a = new C;
    		shared_ptr<C> shareC(a, C::MyRelease); 
    	}
    	cout<<"<- shared_ptr test ended.\n"<<endl;
    	
    	cout<<"std::tr1::shared_ptr<C> copy test"<<endl;
    	{
    		shared_ptr<C> shareC(new C, C::MyRelease);
    		shared_ptr<C> shareC2 = shareC;
    	}
    	cout<<"<- shared_ptr copy test ended.\n"<<endl;
    
    	cout<<"std::auto_ptr<C>:"<<endl;
    	C * b = new C;
    	auto_ptr<C> autoC(b);
    
    	cout<<"return 0;"<<endl;
    	return 0;
    }
    

     
    $ g++ main.cpp

  • 相关阅读:
    JSONObject登录接口
    HttpClient跨域请求post
    线段树个人理解及模板
    Python基本语法(一)
    Boyer-Moore算法
    Sunday算法浅谈
    Kmp算法浅谈
    bm坏字符 , Horspool算法 以及Sunday算法的不同
    字典树的建立和基本查找
    CF Round551 Div2 题解
  • 原文地址:https://www.cnblogs.com/xiaouisme/p/2637498.html
Copyright © 2011-2022 走看看