// 创建unique_ptr对象并指定自定义删除器 std::unique_ptr<int, void(*)(int*)> ptr(new int(5), customDeleter); // 使用unique_ptr对象 std::cout << *ptr << std::endl; return 0; } 在上面的示例中,我们定义了一个名为customDeleter的自定义删除器函数。然后,我们使用unique_ptr模板创...
unique_ptr自定义删除器 1. 解释什么是unique_ptr以及它的基本用法 unique_ptr 是C++11 引入的一种智能指针,用于管理动态分配的内存,确保资源在不再需要时能够被自动释放,从而避免内存泄漏。unique_ptr 拥有其指向对象的唯一所有权,这意味着同一个对象不能有多个 unique_ptr 同时指向它(通过复制或赋值操作会触发编...
(1)std::unique_ptr 是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个 unique_ptr 赋值给另一个 unique_ptr。 eg: // 通过构造函数初始化对象 unique_ptr<int> ptr1(new int(10)); // error, 不允许将一个uniq...
cout<<"upw2.get() ="<< hex << upw2.get() <<endl;//upw1 = nullptr;//释放upw1指向的对象,并将upw1置空//upw1.reset(nullptr);//4.unique_ptr的大小std::unique_ptr<int,decltype(&myDeleter)> upd1(newint(0), myDeleter);//自定义删除器auto del = [](auto* p) {deletep; }; s...
当 std::unique_ptr 被销毁时(例如离开其作用域),它会自动删除其所拥有的对象。默认情况下,std::unique_ptr 使用delete 操作符来删除对象,但也可以通过自定义删除器来改变这一行为。 基础概念 自定义删除器:允许用户指定一个函数或函数对象,当 std::unique_ptr 被销毁时,将调用此函数来释放资源。自定义删除...
unique_ptr指定删除器比shared_ptr复杂,需要在模板参数里面申明指定删除器的类型。这样做的原因在于,unique_ptr绑定删除器是在编译期,删除器的类型本身变成于unique_ptr实例的一部分,因此避免了运行时绑定的时间损耗,这是 unique_ptr的0 额外开销的特性决定的。
2.2.4 指定删除器 2.3 使用shared_ptr要注意的问题 2.3.1 不要用一个原始指针初始化多个shared_ptr 2.3.2 不要在函数实参中创建shared_ptr 2.3.3 通过shared_from_this()返回this指针 2.3.4 避免循环引用 3. unique_ptr 4. weak_ptr 4.1 weak_ptr 介绍 4.2 weak_ptr 的基本用法和常用函数 4.2.1 构造...
unique_ptr独享它指向的对象,也就是说,同时只有一个unique_ptr指向同一个对象,当这个unique_ptr被销毁时,指向的对象也随即被销毁。 实现代码(重要部分) 第一个模板参数T:指针指向的数据类型。 第二个模板参数D:指定删除器,缺省用delete释放资源。#include <memory> ...
1. unique_ptr<T,D> u1(p,d);删除器是unique_ptr类型的组成部分,可是普通函数指针或lambda表达式。注意,当指定删除器时需要同时指定其类型,即D不可省略。 2.使用默认的deleter时,unique_ptr对象和原始指针的大小是一样的。当自定义deleter时,如果deleter是函数指针,则unique_ptr对象的大小为8字节。对于函数对象...
1.删除器是lambda表达式,将匿名函数具名,也可直接使用匿名函数 autodeleter=[](AVPacket*p_packet){av_packet_free(&p_packet);};std::unique_ptr<AVPacket,decltype(deleter)>up_packet((AVPacket*)//或是shared_ptrstd::shared_ptr<AVPacket>up_packet((AVPacket*)av_malloc(sizeof(AVPacket)),deleter)...