写一个 c++智能指针 自定义释放函数的例子
时间: 2024-03-16 15:41:45 浏览: 14
以下是一个示例代码,展示了如何在C++中创建一个智能指针,并定义一个自定义的释放函数:
```cpp
#include <iostream>
#include <functional>
template <typename T>
class SmartPtr {
public:
SmartPtr(T* ptr, std::function<void(T*)> deleter)
: ptr_(ptr), deleter_(deleter) {}
~SmartPtr() { deleter_(ptr_); }
T& operator*() const { return *ptr_; }
T* operator->() const { return ptr_; }
private:
T* ptr_;
std::function<void(T*)> deleter_;
};
// 自定义释放函数
void myDeleter(int* ptr) {
std::cout << "Custom deleter called" << std::endl;
delete ptr;
}
int main() {
SmartPtr<int> p(new int(42), myDeleter);
std::cout << *p << std::endl;
return 0;
}
```
在这个例子中,我们创建了一个SmartPtr类,它接受指针和一个自定义的释放函数作为参数。在SmartPtr的析构函数中,我们调用了自定义的释放函数来释放指针。在main函数中,我们创建了一个SmartPtr对象,并传入一个new int(42)指针和我们定义的自定义释放函数。当SmartPtr超出作用域时,自定义释放函数会被调用,从而释放内存。