c++ - 具有在参数中返回指针的函数的智能指针

标签 c++ smart-pointers unique-ptr c++-standard-library standard-library

这个问题被讨论过几次,但所有这些讨论已经有将近十年的历史了,而且没有好的解决方案。问题是一样的。

我们有智能指针,比如 unique_ptr,这很棒。我们有大量的 C 函数返回一个指向对象的指针作为稍后需要释放的参数。

假设这是函数:

int CreateSomething(OBJECT_TYPE** pObject);

那么,如果没有智能指针,我们通常会做什么?显然是这样的:

OBJECT_TYPE* pObject;
if(CreateSomething(&pObject) == 0) {
    // Use the pObject pointer
    delete pObject;
}

现在,我想用智能指针重写它,我希望它像这样简单:

unique_ptr<OBJECT_TYPE> pObject;
if(CreateSomething(&pObject) == 0) {
    // Use the pObject pointer
}

从技术上讲,如果 unique_ptrT** operator&,并且它依赖于这种工作流,那是很有可能的,但事实并非如此。

如果我们想在这里使用智能指针,我们必须声明一个常规指针,在那个函数中使用它,然后将它重新分配给智能指针。但是这些额外的步骤可以而且应该被取消,我希望也许已经有一个实现可以让我以我展示的那种简单方式做我需要的事情。

是的,我可以编写自己的智能指针或中介器,这将简化 unique_ptr 的使用,但首先我想问一下是否已经在标准的深度上实现了一些东西这个库,我只是忽略了它?

最佳答案

C++23 最近添加了 std::out_ptr正是针对这个用例。

关于c++ - 具有在参数中返回指针的函数的智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68715805/

相关文章:

c++ - 是否可以将包含 unique_ptr 的对象存储在静态容器中?

c++ - 如何将 C++ COM 组件升级到云部署

c++ - 新的通用指针any_ptr(现为dumb_ptr)使代码在智能指针之间更可重用

销毁 CComPtr 期间的异常

c++ - 使用 old_pointer + offset 的 new_pointer 设置 shared_ptr

c++ - 当成员可能在迭代过程中被删除时,如何遍历集合?

C++:unique_ptr 未正确初始化

c++ - 在 main 的范围内找不到函数

c++ - 将 char* 严格别名为更广泛的类型,没有未定义的行为

C++:获取当前时间作为 W3C UTC 时间字符串