App*_*per 2 c++ smart-pointers heap-memory unique-ptr raw-pointer
我正在使用一个函数(它是库的一部分),它返回一个uint8_t*指向已在堆上分配并保存图像像素数据的内存的原始指针。这个函数的调用者负责调用free指针。
我调用此函数的代码有许多提前终止的分支,因此我需要free(buffer)在许多点调用。我认为最好将缓冲区包装在 a 中,unique_ptr以便当它超出范围时,内存会自动释放。
我怎样才能做到这一点?
作为参考,函数 decleration 看起来像这样:(uint8_t* getFrame()我已经知道图像的宽度、高度和 num 通道以及缓冲区的长度);
这很简单!的模板std::unique_ptr如下所示:
template<class T, class Deleter>
class unique_ptr;
Run Code Online (Sandbox Code Playgroud)
unique_ptr当它超出范围时,Deleter 用于清理指向的值。我们可以写一个free真的很简单地使用!
struct DeleteByFree {
void operator()(void* ptr) const {
free(ptr);
}
};
template<class T>
using my_unique_ptr = std::unique_ptr<T, DeleteByFree>;
Run Code Online (Sandbox Code Playgroud)
现在,每当您使用 的实例时my_unique_ptr,它都会调用 C 的free()函数来清理自己!
int main(){
// This gets cleaned up through `free`
my_unique_ptr<int> ptr {(int*)malloc(4)};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |