使用shared_ptr指向数组,需要自定义析构
如果shared_ptr指向一个数组:
std::shared_ptr<int> p3(new int[12]);
则在shared_ptr默认的析构函数中,shared_ptr还是会调用 delete 函数来删除int数组,而正确的方式是使用 delete [],这种情况下,需要定制析构函数(deleter),将其作为回调,传递给shared_ptr的构造函数 。
使用自定义析构器deleter创建sharedptr
使用函数指针
shared_ptr构造函数的第二个参数可以传递自定义析构器deleter
void deleter(Sample *x){
std::cout<<"DELETE FUNCTION CALLED\n";
delete[] x;
}
std::shared_ptr<Sample> p3(new Sample[12], deleter);
检查完整的例子如下:
#include <iostream>
#include <memory>
struct Sample {
Sample() {
std::cout << "CONSTRUCTOR\n";
}
~Sample() {
std::cout << "DESTRUCTOR\n";
}
};
//在接收到的指针上调用delete[]的函数