(原)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

原文链接: https://www.cnblogs.com/xiaouisme/archive/2012/08/14/2637498.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    (原)C++智能指针——释放器(in linux, g++)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/59209

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午9:02
下一篇 2023年2月9日 上午9:03

相关推荐