如果你使用智能指针管理的资源不是new分配的内存,记住传递给它一个删除器。
时间: 2024-11-30 11:15:22 浏览: 8
智能指针是一种特殊的C++库,如`std::unique_ptr`、`std::shared_ptr`等,它们的设计目的是自动管理动态分配的资源,比如通过`new`操作符创建的对象。当智能指针不再有效时(例如生命周期结束),它会自动释放所管理的内存。
然而,如果你的资源不是由`new`直接分配的内存,比如它来自堆以外的地方,或者是一个全局对象,那么直接使用标准智能指针可能会导致资源泄漏,因为智能指针并不知道如何处理这种情况。这时,你需要提供一个自定义的删除器函数(deleter),告诉智能指针在适当的时候释放这个资源。
例如,对于这样的资源:
```cpp
struct CustomResource {
// ... 具体结构定义
};
void customDeleter(CustomResource* resource) {
// 清理或关闭CustomResource的特定操作
// ...
}
std::unique_ptr<CustomResource, decltype(&customDeleter)> ptr(customResource, &customDeleter);
```
在这个例子中,`customDeleter`就是那个“删除器”,当`ptr`离开作用域时,它会被调用,以便正确地清理`CustomResource`。这样可以确保即使资源不是由`new`分配,也能得到适当的管理。
阅读全文