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