// 定义一个自定义的删除器 auto deleter = [](AVFrame* frame) { av_frame_free(&frame); }; // 使用unique_ptr和自定义删除器创建智能指针 std::unique_ptr<AVFrame, decltype(deleter)> frame(av_frame_alloc(), deleter); // 现在,无论何时frame超出范围或被重新分配,都会自动调用av_frame_free来...
当这个unique_ptr被销毁时,它所指向的对象也会被删除。 weak_ptr:这是一种不控制对象生命周期的智能指针。它是为了解决shared_ptr可能导致的循环引用问题而设计的。 基于范围的for循环 (Range-based for loop):C++11引入了一种新的for循环语法,使得遍历数据结构(如数组、向量、列表等)变得更简单、更安全。基于范...
智能指针:std::shared_ptr、std::unique_ptr、std::weak_ptr 正则表达式:std::regex 随机数库:std::random 时间库:std::chrono 固定大小数组:std::array 元组类型:std::tuple std::unordered_map 和std::unordered_set:哈希表实现的关联容器 新的内存模型和原子操作:std::atomic 异步任务与期约:std::async...
unique_ptr:这是一种独占所有权的智能指针。在任何时候,只能有一个unique_ptr指向一个对象。当这个unique_ptr被销毁时,它所指向的对象也会被删除。 weak_ptr:这是一种不控制对象生命周期的智能指针。它是为了解决shared_ptr可能导致的循环引用问题而设计的。 2.基于范围的for循环 (Range-based for loop):C++11...
而RAII最经典的案例,就是mutex guard,以及unique_ptr。 所以就手痒了一下,用C写了一个简单的object guard,来实现RAII,代码如下: /*** return时自动销毁指针的宏 ***/#include<stdarg.h>voidrecycle(intcount,...){va_listargs;va_start(args,count);for(inti=0;i<count;++i)free(va_arg(args,void*...
C 语言数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。数组分为一维数组和二维数组,当数组中每个元素都只带有一个下标时,称这样的数组为一维数组,一维数组实质上是一组...
常用的智能指针:智能指针在C++11版本之后提供,包含在头文件中,主要是shared_ptr、unique_ptr、weak_ptr。unique_ptr不支持复制和赋值。当程序试图将一个 unique_ptr 赋值给另一个时,如果源 unique_ptr 是个临时右值,编译器允许这么做;如果原来的unique_ptr 将存在一段时间,编译器将禁止这么做。shared_ptr是基于...
C++智能指针 unique_ptr、shared_ptr 的实现 摘要:shared_ptr shared_ptr 是通过引用计数的方式实现的,这里结合一个单线程的参考实现进行解释。注意,这种实现并不是线程安全的。STL 的 std::shared_ptr 也不是线程安全的,两个成员变量的修改并不是一次操作完成的,使用时需要加锁。 参考实现 namespace smar阅读全...
C++中的std::shared_ptr和std::unique_ptr是常用的智能指针。它们使用引用计数和独占所有权的方式来管理内存,当引用计数为0或者独占所有权的指针被销毁时,内存会自动释放。 使用垃圾回收机制:垃圾回收是一种自动管理内存的机制,它会周期性地检查程序中不再使用的内存,并将其释放。在C++中,可以使用第三方库...
int first_element = *ptr; // 1 int second_element = *(ptr + 1); // 2 腾讯云推荐产品:腾讯云 CVM(云服务器),可以用于部署和运行 C 语言程序。 向量:向量是一种动态数组,可以根据需要增加或减少元素。在 C++ 语言中,向量的下标值也是从 0 开始计算的。例如,声明一个整数向量: 代码语言:c...