void mydeleter(string *pdel)
{
delete pdel;
pdel = nullptr;
//可以打印日志
cout<<"mydeleter"<<endl;
}
class CallableObject
{
void operator()(string *pdel)
{
delete pdel;
cout << "delete with callable object" << endl;
}
};
void test19(){
// a.1
typedef void(*fp)(string *);
unique_ptr<string, fp> ps1(new string("good luck"), mydeleter);
//a.2
using fp2 = void(*)(string *);
unique_ptr<string, fp2> ps2(new string("good luck"), mydeleter);
//a.3
typedef decltype(mydeleter)* fp3; //decltype()返回函数类型void(string *),所以要加*,现在fp3应该是void *(string *)
unique_ptr<string, fp3> ps3(new string("good luck"), mydeleter);
//a.4
unique_ptr<string, decltype(mydeleter)*> ps4(new string("good luck"), mydeleter);
//a.5,lambda表达式,可以理解成operator()类类型对象
auto mydella = [](string *pdel)->void{
delete pdel;
pdel = nullptr;
cout<<"mydella"<<endl;
};
//注意,lambda表达式mydella被编译器理解成对象(即ps5的参2),所以我们类型不能加*,否则地址与对象不匹配
//而上面的函数名mydeleter代表是首地址,需要加*地址符号进行匹配。(对象不是对象,&对象才是地址)
unique_ptr<string, decltype(mydella)> ps5(new string("good luck"), mydella);
//a.6 使用可调用对象
unique_ptr<string, CallableObject> ps6(new string("good luck"), CallableObjcet());
//a.7
CallableObject obj;
unique_ptr<string, CallableObject> ps7(new string("good luck"), obj);
//a.8
CallableObject *pObj = nullptr;
unique_ptr<string, CallableObject> ps7(new string("good luck"), (*pObj));
}
Unique_ptr删除器
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.删除器是lambda表达式,将匿名函数具名,也可直接使用匿名函数 2.用std::make_shared<>(...
- 原文地址:https://www.cnblogs.com/lsgxeva/p/7788061.html C++11...
- share_ptr作用:相当于一个容器,托管堆指针,实现智能释放堆内存,支持同个堆指针被多个容器托管 原理:利用容...
- 1. std::shared_ptr<uint16_t> 和 std::shared_ptr<uint16_t[]...
- unique_ptr的代码实现: Share_ptr的代码实现如下: 引自:极客时间/22-现代C++实战30讲/...