定制删除器其实是利用仿函数
一、仿函数是什么?
不是函数但可以像函数一样使用,因为重载了operator()
简单举例:
template<class T>
struct Less
{
bool operator()(const T& l, const T& r)
{
return l < r;
}
};
void Test2()
{
Less<int>less1;
cout << less1(1, 2) << endl;
}
二、具体场景
void Teat()
{
shared_ptr<FILE>spl((FILE*)fopen("test.txt", "w"));
}
上述场景中将产生错误,因为用fopen打开,要用fclose关闭
三、定制删除器举例
代码如下:
template<class T>//注意这里有模版
struct Del
{
void operator()(const T* ptr)
{
delete ptr;
}
};
struct Free//注意这里没有模版
{
void operator()(void* ptr)
{
free(ptr);
}
};
struct Fclose
{
void operator()(FILE* ptr)
{
fclose(ptr);
}
};
template<class T,class Delet