现代C++学习笔记3 std::out_ptr Why, What, How

std::out_ptr是现代C++23的一个新功能。主要用在当C++引用C函数时,特别是该C函数中有malloc的使用,并且我们希望能在引用函数中进行内存释放(free)。

用此功能需要在C++设置中加上C++23 experimental。

例如 我们有一下C函数,

extern "C" void init_c(int** p)

{

    *p = (int*)malloc(10);

    **p = 10;

}

一般来讲,我们可用下列方法来调入该C函数,

int main()

{

    int* ptr_c;

    init_c(&ptr_c);

//做一些事情

    free(ptr_c);

}

但是如果我们想用unique_ptr来定义ptr_c(避免维护的工作),但这样一来就不能直接调用free时该怎么办呢?

C++23引入了out_ptr的用法,改进后的代码如下,

int main()

{

    std::unique_ptr ptr;

    init_c(out_ptr(ptr));

//做一些事情

}

我们在unique_ptr声明中用到了Deleter pattern并直接用lambda来自动释放C函数中所分配的内存。

你可能感兴趣的:(c++,学习,笔记)