首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解std::inout_ptr和std::out_ptr在C++23中的应用

理解std::inout_ptr和std::out_ptr在C++23中的应用
EN

Stack Overflow用户
提问于 2021-08-25 07:07:13
回答 1查看 1.1K关注 0票数 13

我正在阅读为C++23提出的库更改列表,我对std::out_ptrstd::inout_ptr (他们的_t兄弟姐妹)很感兴趣。据我所知,它们是智能指针与原始指针兼容的某种包装器,但我还没有理解它们。也许这里有人熟悉这个建议,或者给出一个不太像ISO的解释或例子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-25 07:57:23

TL;DR --这是为了实现inout/inout指针参数和智能指针之间更简单、更无足轻重的互操作性。

更长的答案

我们把这些东西分开。std::out_ptrstd::inout_ptr分别用于创建std::out_ptr_tstd::inout_ptr_t类型的对象。这些类型和功能是用来做什么的?让我们看一个受启发的示例(为了简单起见,我用好的ol‘int替换了泛型参数):

代码语言:javascript
复制
int foreign_resetter(int**);
auto up = std::make_unique<int>(5);
 
if (int ec = foreign_resetter(std::inout_ptr(up)) {
    return ec;
}

正如您所看到的,使用std::inout_ptr_t创建的std::inout_ptr传递给函数,将指针传递到指向std::unique_ptr模板参数的指针。在添加std::inout_ptr_t之前,与旧的C输入输出指针参数进行互操作要麻烦得多,而且容易出错。它看起来不像这样:

代码语言:javascript
复制
int foreign_resetter(int**);
auto up = std::make_unique<int>(5);
 
int* up_raw = up.release();
if (int ec = foreign_resetter(&up_raw)) {
    return ec;
}
up.reset(up_raw);
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68918312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档