【发布时间】:2017-06-28 12:37:24
【问题描述】:
我在 external 库中有一个 预先存在的 函数,它看起来像这样;
bool CreateTheThing(MyThing *& pOut);
简而言之;我给它一个原始指针(通过引用),该函数分配内存并将我的指针分配给新分配的对象。当函数返回时,我的有责任在我完成后释放内存。
显然,我想将此结果存储到unique_ptr<MyThing>,并避免手动使用delete。
我可以创建一个临时原始指针以用于 API 调用,并将其传递给 unique_ptr 的构造函数;
MyThing* tempPtr;
CreateTheThing(tempPtr);
unique_ptr<MyThing> realPtr = unique_ptr<MyThing>(tempPtr);
还有比这更直接的方法吗?一个不需要临时原始指针的?理想情况下,会有unique_ptr 的方法以一种可以直接与CreateTheThing 方法一起使用的方式公开其内部指针?
unique_ptr<T>::get() 不允许这样做,据我所知。它返回的指针不是对内部使用的指针的引用。
【问题讨论】:
-
库是否要求您使用
free()来解除分配? -
有什么理由不只返回一个指针?
-
啊,太糟糕了。外部库迫使你编写愚蠢的代码。
-
您可以将realPtr行缩短为
unique_ptr<MyThing> realPtr(tempPtr); -
是的,或者!:
auto realPtr = unique_ptr<MyThing>(tempPtr)
标签: c++ c++11 unique-ptr