C++11 命名API,意味着内存所有权的转移?

C++11 命名API,意味着内存所有权的转移?,c++11,naming-conventions,smart-pointers,unique-ptr,api-design,C++11,Naming Conventions,Smart Pointers,Unique Ptr,Api Design,我有一个数据结构。它提供用于从其内部集合中添加或删除项的API。在内部,该结构使用std::unique_ptr来维持每个项目的寿命。这意味着“添加”一个项会隐式地将内存的所有权转移到我的数据结构中 我已经在这个API的评论中清楚地记录了这一点,但我想知道;是否有一个事实上的名称或动词可以附加到我的API中,以引起对这一重要副作用的注意 例如:AddItem(Item*Item)似乎并不充分暗示所有权的转移RegisterItem、CreateItem、TransferItem似乎都暗示着不同的

我有一个数据结构。它提供用于从其内部集合中添加或删除项的API。在内部,该结构使用
std::unique_ptr
来维持每个项目的寿命。这意味着“添加”一个项会隐式地将内存的所有权转移到我的数据结构中

我已经在这个API的评论中清楚地记录了这一点,但我想知道;是否有一个事实上的名称或动词可以附加到我的API中,以引起对这一重要副作用的注意


例如:
AddItem(Item*Item)
似乎并不充分暗示所有权的转移
RegisterItem
CreateItem
TransferItem
似乎都暗示着不同的含义。

传达所有权转让的方式是使用
std::unique\u ptr
作为参数:

AddItem(std::unique_ptr<Item> item)
AddItem(标准::唯一项目)

如果您的API需要允许使用与客户端不同的
std
库实现,这需要额外的工作。(您将有一个填充层和一个二进制稳定的API层)更简单:
namespace library{namespace private_abi{void AddItem(Item*Item);}内联void AddItem(std::unique_ptr Item){private_abi::AddItem(Item.release());}
无需重新实现它,您可以通过一个使用C风格绑定的狭窄填充。在内部,
private\u abi::AddItem
将其重新绑定到一个唯一的ptr。@Yakk哦,太好了。简单得多:)