template <typename T> struct auto_deleter
{
typedef void(*D)(T*);//函数指针定义
T* data;
D deleter;
auto_deleter(T* _data, D _deleter):data(_data), deleter(_deleter)
{
}
~auto_deleter()
{
if (data)
{
deleter(data);
}
}
T* release()
{
T* result = data;
data = 0;
return result;
}
};
在使用时,把销毁函数传入,自动清除内存或文件描述符等