swap与数组 02:08 C++初级内存管理:move、exchange与数组 00:44 C++初级内存管理:共用体 07:30 C++初级内存管理:共用体简单练习【洛谷 P1100】 03:09 C++初级内存管理:初识大小端【A】 01:50 C++初级内存管理:初识大小端【B】【判断大小端的常用代码】 01:05 数位动态规划基础:穷举1到n位数 09:46 数位...
DefaultDeleter 结构体,这是一个默认删除器,用于释放 UniquePtr 持有的资源。 - 第一个模板是一般情况,用 delete 释放单个对象。 - 第二个模板是数组的偏特化版本,用 delete[] 释放数组。 - 第三个模板是 FILE 类型的全特化版本,用 fclose 关闭文件指针。 template<classT>structDefaultDeleter{voidoperator()(...
因为std::unique_ptr强调唯一所有权,所以它不支持拷贝构造函数和拷贝赋值运算符,但支持移动构造和移动赋值。 3、数组形式。 std::unique_ptr还支持数组形式,用法为std::unique_ptr<T[]>,适用于动态分配的数组资源管理。 4、嵌套指针。 当需要管理指向动态分配对象的指针的指针时,可以使用std::unique_ptr<std::u...
《现代C++编程入门》第21集:使用基于范围的for语句循环累加原始整数数组的元素值并输出——《刚哥伴读会》 02:25 《现代C++编程入门》第22集:使用基于范围的for语句累加原始整数数组范围的元素值并输出——《刚哥伴读会》 02:15 《现代C++编程入门》第23集:使用while语句计算阶乘——《刚哥伴读会》 03:20 《...
在这个示例中,我们定义了一个ArrayDeleter模板结构体,它重载了operator()来执行delete[]操作,从而正确释放动态分配的数组。然后,我们定义了一个make_unique_array函数,它使用std::make_unique和自定义的ArrayDeleter来创建并返回一个std::unique_ptr<uint8_t[], ArrayDeleter<uint8_t>>,这个智能指...
在上述的智能指针使用中,我们通过传入delete的函数,这里可以采用更优雅的方式:通过结构体的运算符重载达到delete函数的效果 #include<iostream>#include<memory>using namespace std;typedefstruct_package{unsignedchar*data;intlength;}package_t;voidrelease_package(package_t*package){cout<<"release_package"<<endl;...
只声明了结构体student,但是并没有定义,所以是一个 incomplete type,所以sizeof无法执行。 回到unique_ptr,现在我们知道unique_ptr的报错链路是unique_ptr->delete->sizoef,也就是sizeof才是罪魁祸首。所以当Deleter非默认时,就不一定需要知道类型的析构函数。比如下面这样: ...
只声明了结构体student,但是并没有定义,所以是一个 incomplete type,所以sizeof无法执行。 回到unique_ptr,现在我们知道unique_ptr的报错链路是unique_ptr->delete->sizoef,也就是sizeof才是罪魁祸首。所以当Deleter非默认时,就不一定需要知道类型的析构函数。比如下面这样: ...
在《C++11 shared_ptr智能指针》的基础上,本节继续讲解 C++11 标准提供的另一种智能指针,即 unique_ptr 智能指针。 作为智能指针的一种,unique_ptr 指针自然也具备“在适当时机自动释放堆内存空间”的能力。和 shared_ptr 指针最大的不同之处在于,unique_ptr 指针指向的堆内存无法同其它 unique_ptr 共享,也就...
unique_ptr 智能指针是以模板类的形式提供的,unique_ptr<T>(T 为指针所指数据的类型)定义在<memory>头⽂件,并位于 std 命名空间中。因此,要想使⽤ unique_ptr 类型指针,程序中应⾸先包含如下 2 条语句:1. #include <memory> 2. using namespace std;第 2 句并不是必须的,可以不添加,则后续...