当前位置 : 主页 > 编程语言 > c语言 >

智能指针可以使用的删除器

来源:互联网 收集:自由互联 发布时间:2023-08-25
智能指针有unique_ptr(独占指针),shared_ptr(共享指针)。 unique_ptr独占式指针,只能由一个智能指针拥有管理指针资源。 shared_ptr则是共享式指针,多个指针对象可以共享同一个指针资源

智能指针有unique_ptr(独占指针),shared_ptr(共享指针)。

unique_ptr独占式指针,只能由一个智能指针拥有管理指针资源。

shared_ptr则是共享式指针,多个指针对象可以共享同一个指针资源。


C++中,智能指针本质上就是类模板,可以通过定义一个自定义的删除器(Deleter)来指定智能指针在析构时释放资源的方式。智能指针中的删除器可以是一个函数对象(函数指针),函数符或者是Lambda表达式。

函数指针:

函数指针是指向函数的指针变量,可以存储一个函数的入口地址,通过调用该指针变量就可以实现对被指向函数的调用。使用函数指针最常用的场景是作为回调函数,也可以用于实现函数指针数组、函数指针作为函数参数等特殊功能。

// 声明一个返回值为int,带两个int类型参数的函数指针
int (*pfunc)(int, int);

在这个例子中,`int (*pfunc)(int, int)`表示定义了一个指向返回值为int类型、带两个int类型参数的函数指针。我们可以将pfunc指向符合这个函数类型的函数,调用该函数指针时,实际上就是调用被指向函数。

函数符:

函数符是一个重载调用运算符 operator() 的对象或模板类实例,通常称为仿函数(Functor)。函数符可以像函数一样被调用,可以接受参数并返回结果,具有更大的灵活性和自定义性。函数符常用于算法、容器、迭代器等STL模板中。

// 一个返回值为int类型的函数符
struct MyFunc {
    int operator() (int a, int b) const { return a + b; } 
};

在这个例子中,定义了一个名为MyFunc的函数符,重载了函数调用运算符operator()。当函数符对象被调用时,实际上就是在调用这个运算符重载函数。

Lambda表达式

Lambda函数是一种匿名函数,它的定义方式类似于一个函数,但没有名字,可以使用[]包围的捕获列表来捕获外部变量,在()中指定函数参数,在{}中定义函数体。Lambda函数的特点是在定义时生成一个可调用对象,可以将这个对象赋值给一个变量,也可以作为其他函数的参数或返回值,实现了代码更加简洁、易读的目的。


auto func = [](int a, int b) { return a + b; };

在这个例子中,定义了一个匿名函数,通过[]捕获列表捕获外部变量,()中定义函数参数列表,{}中定义函数体,赋值给了一个变量func。可以像调用函数一样使用func(1, 2)来调用Lambda函数。

总之,函数指针、函数符、Lambda函数都是实现函数调用的方法,它们在应用场景和使用方式上有所区别,在具体编程中可以根据需要进行选择。



上一篇:内存四区
下一篇:没有了
网友评论