Cpp / shared_ptr 配置删除器的方法

一、普通函数

void Deleter(T *x)
{delete[] x;
}std::shared_ptr p1(new T[5], Deleter);

二、仿函数

class Deleter
{
public:void operator() (T *x) {delete[] x;}
};std::shared_ptr p2(new T[5], Deleter);

三、lamda 表达式

std::shared_ptr p3(new T[5], [](T *x) {delete[] x;
});

四、源代码

	shared_ptr(_Yp* __p, _Deleter __d): __shared_ptr<_Tp>(__p, std::move(__d)) { }/***  @brief  Construct a %shared_ptr that owns a null pointer*          and the deleter @a __d.*  @param  __p  A null pointer constant.*  @param  __d  A deleter.*  @post   use_count() == 1 && get() == __p*  @throw  std::bad_alloc, in which case @a __d(__p) is called.**  Requirements: _Deleter's copy constructor and destructor must*  not throw**  The last owner will call __d(__p)*/

从源代码注释中可以知道,当释放 __p 时,实际上就是调用 __d(__p),所以只要满足返回值为 void ,传入的删除器有单一形参并且形参为 T 的指针即可,

栗子:

 void Deleter(T *)void Deleter(T * const)void Deleter(T *&)

 

(SAW:Game Over!)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部