2

J'ai une structure de données. Il fournit des API pour ajouter ou supprimer des éléments de sa collection interne. En interne, la structure utilise std::unique_ptr pour maintenir la durée de vie de chaque article. Cela signifie que "ajouter" un élément implicitement transfère la propriété de la mémoire à ma structure de données.API de dénomination, pour impliquer le transfert de la propriété de la mémoire?

Je l'ai documenté clairement dans les commentaires pour cette API, mais je me demandais; Y a-t-il un nom ou un verbe de facto que je peux associer à mon API pour attirer l'attention sur cet effet secondaire important?

Par exemple: AddItem(Item* item) ne semble pas impliquer de manière adéquate le transfert de propriété. RegisterItem, CreateItem, TransferItem semblent tous impliquer quelque chose de différent.

Répondre

3

La façon de communiquer le transfert de propriété est d'utiliser un std::unique_ptr comme argument:

AddItem(std::unique_ptr<Item> item) 
+0

Ce que si votre API doit admettre la possibilité d'utiliser une autre implémentation de la bibliothèque 'std' que le client, cela nécessite un travail supplémentaire. (Vous auriez une couche de calage et une couche API binaire stable) – Yakk

+0

Plus facile: 'namespace library {namespace private_abi {void AddItem (Item * item); } Inline void AddItem (std :: unique_ptr élément) {private_abi :: AddItem (item.release()); }} 'Pas besoin de le réimplémenter, vous le passez à travers une cale étroite qui utilise des liaisons de style C. À l'intérieur, le 'private_abi :: AddItem' le relie à un ptr unique. – Yakk

+0

@Yakk oh, sympa. Beaucoup plus simple :) – user2079303