这个问题被讨论过几次,但所有这些讨论已经有将近十年的历史了,而且没有好的解决方案。问题是一样的。
我们有智能指针,比如 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_ptr
有 T** operator&
,并且它依赖于这种工作流,那是很有可能的,但事实并非如此。
如果我们想在这里使用智能指针,我们必须声明一个常规指针,在那个函数中使用它,然后将它重新分配给智能指针。但是这些额外的步骤可以而且应该被取消,我希望也许已经有一个实现可以让我以我展示的那种简单方式做我需要的事情。
是的,我可以编写自己的智能指针或中介器,这将简化 unique_ptr
的使用,但首先我想问一下是否已经在标准的深度上实现了一些东西这个库,我只是忽略了它?
最佳答案
C++23 最近添加了 std::out_ptr
正是针对这个用例。
关于c++ - 具有在参数中返回指针的函数的智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68715805/