智能指针中的删除器可以是一个函数对象(函数指针),函数符或者是Lambda表达式。 函数指针: 函数指针是指向函数的指针变量,可以存储一个函数的入口地址,通过调用该指针变量就可以实现对被指向函数的调用。使用函数指针最常用的场景是作为回调函数,也可以用于实现函数指针数组、函数指针作为函数参数等特殊功能。 // 声明一...
在C++17之前,std::shared_ptr用于管理数组时需要自定义删除器来释放数组内存,因为默认使用delete来释放所管理的对象,而delete不能正确释放分配的数组,需要在自定义删除器delete[]释放数组。 注: C++17 之后,std::shared_ptr可以管理动态分配的数组,因为std::shared_ptr<T[]>默认使用delete[]来释放所管理的对象。
在C++17之前,std::shared_ptr用于管理数组时需要自定义删除器来释放数组内存,因为默认使用delete来释放所管理的对象,而delete不能正确释放分配的数组,需要在自定义删除器delete[]释放数组。 注: C++17 之后,std::shared_ptr可以管理动态分配的数组,因为std::shared_ptr<T[]>默认使用delete[]来释放所管理的对象。
void deletefunc(AA* a) { // 删除器,普通函数。 cout << "自定义删除器(全局函数)。\n"; delete a; } struct deleteclass // 删除器,仿函数。 { void operator()(AA* a) { cout << "自定义删除器(仿函数)。\n"; delete a; } }; auto deleterlamb = [](AA* a) { // 删除器,Lambda表...
std::shared_ptr<int> p(new int,DeletePoint);//函数方法删除器 std::shsred_pte<int> p1(new int,[](int *p){delete p;});//表达式 return 0; } 上面是一个普通的指针,如果想用智能指针管理动态数组该怎么处理呢?请看下面的代码: std::shared_ptr<int> p(new int[100],std::default_delete<...
unique_ptr支持动态数组,而shared_ptr不能直接支持动态数组: std::unique_ptr<int[]>ptr(newint[10]);//合法,std::shared_ptr<int[]>ptr(newint[10]);//是不合法的 如果通过std::shared_ptr来构造动态数组,则需要显式指定删除器,比如下面的代码: ...
2. 删除器应什么时候使用?在需要 delete 以外的析构行为的时候用.因为shared_ptr在引用计数为 0 后...
1. 自定义删除器 智能指针允许指定自定义删除器,这在需要特殊销毁逻辑时非常有用。 struct CustomDeleter { void operator()(MyClass* ptr) { std::cout << "Custom deleter is deleting an object" << std::endl; delete ptr; } }; int main() { ...
---默认的删除器(Default deleter) 函数对象类,其功能像调用(invokation)并删除一个类型为T*对象。 无参数的版本只是简单的使用delete执行内存释放操作。 同样(likewise), 以运行时确定数组长度的数组参数版本使用delete[]执行内存释放操作 此类用于保存unique_ptr实例中类型删除器而特意设计,或者用于定义一个删除器...