C++智能指针自定义删除器

std::unique_ptr

对于std::unique_ptr,自定义删除器可以通过指定一个可调用对象来实现,可调用对象的类型可以是函数指针、函数对象或者lambda表达式等,通常使用lambda表达式比较方便。一般来说,lambda表达式的形式为:

[](T* p) { /* custom delete code */ }

其中,T是指向被管理对象的指针类型,custom delete code是用户定义的释放资源的代码。

std::unique_ptr支持两种指定删除器的方式:一种是在声明unique_ptr对象时通过构造函数指定,如:

std::unique_ptr<T, Deleter> ptr(new T, [](T* p) { /* custom delete code */ });

其中Deleter是自定义删除器类型,ptrstd::unique_ptr对象名。

另一种是通过reset()成员函数或release()成员函数指定删除器,如:

ptr.reset(new T, [](T* p) { /* custom delete code */ });
ptr.release();

std::shared_ptr

对于std::shared_ptr,自定义删除器的方式与std::unique_ptr类似,可以使用lambda表达式或者其他可调用对象来实现,只需要在std::shared_ptr对象的构造函数或reset()成员函数中指定即可。需要注意的是,std::shared_ptr的自定义删除器类型必须满足特定的要求,即必须有一个形参类型为被管理对象的指针类型,返回值类型为voidoperator()成员函数。这是因为std::shared_ptr的实现需要通过自定义删除器来管理引用计数等资源。

std::shared_ptr<T> ptr(new T, [](T* p) { /* custom delete code */ });
ptr.reset(new T, [](T* p) { /* custom delete code */ });

另外,对于std::shared_ptr,还可以使用std::make_shared函数来创建对象和智能指针,并通过其模板参数来指定自定义删除器,如:

std::shared_ptr<T> ptr = std::make_shared<T>(args..., [](T* p) { /* custom delete code */ });

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值