std::unique_ptr及std::shared_ptr设置自定义删除器

1.删除器是lambda表达式,将匿名函数具名,也可直接使用匿名函数

    auto deleter = [](AVPacket* p_packet){av_packet_free(&p_packet);};
    std::unique_ptr<AVPacket, decltype(deleter)> up_packet((AVPacket*)

    //或是shared_ptr  
    std::shared_ptr<AVPacket> up_packet((AVPacket*)av_malloc(sizeof(AVPacket)), deleter);
    //或是匿名的lambda
    std::shared_ptr<AVPacket> up_packet((AVPacket*)av_malloc(sizeof(AVPacket)), [](AVPacket* p_packet){av_packet_free(&p_packet);});

2.用std::make_shared<>()或std::make_unique<>

不得行,莫得这种操作,可以用上面那种然后

= std::move();

3.其他方式的自定义删除器

//数组放在堆中
std::shared_ptr<Sample> p(new Sample[5], std::default_delete<Sample[]>());
//仿函数方式
class Deleter
{
public:
    void operator() (Sample *x) {
        std::cout << "Deleter function called" << std::endl;
        delete[] x;
    }
};
// 构造函数传递自定义删除器指针
std::shared_ptr<Sample> p2(new Sample[5], Deleter);
//使用std::function
void Deleter(Connection *connection){
    close(connection);
    delete connection;
}

int main(){
    std::function<void (Connection*)> deleter(Deleter);
    // 新建管理连接Connection的智能指针
    shared_ptr<Connection> sp(new Connection("shared_ptr"), deleter);
    unique_ptr<Connection, decltype(deleter)> up(new Connection("unique_ptr"), deleter);
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容