2

데이터 구조가 있습니다. 내부 컬렉션에서 항목을 추가하거나 삭제하기위한 API를 제공합니다. 내부적으로이 구조는 std::unique_ptr을 사용하여 각 항목의 수명을 유지합니다. 즉, 항목을 "추가"암시 적으로 내 데이터 구조에 메모리 소유권을 이전하는 것을 의미합니다.메모리 소유권 양도를 암시하는 API 명명?

이 API에 대한 설명에이 내용이 명확하게 설명되어 있지만 궁금합니다. 이 중요한 부작용에주의를 환기시키기 위해 API에 첨부 할 수있는 사실상의 이름이나 동사가 있습니까?

예 : AddItem(Item* item)은 소유권 이전을 적절히 의미하지는 않습니다. RegisterItem, CreateItem, TransferItem은 모두 다른 것을 의미합니다. 소유권의 이전을 전달하는 방법

답변

3

이 인수로 std::unique_ptr 사용하는 것입니다 : 그것은 당신의 API가 클라이언트와 다른`std` 라이브러리 구현을 사용의 가능성을 인정해야하는 경우 그건

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

을, 이것은 추가 작업이 필요합니다. (당신은 심층과 안정적인 API 레이어를 가지고있을 것입니다.) – Yakk

+0

쉽게 :'namespace library {namespace private_abi {void AddItem (Item * item); } 인라인 void AddItem (std :: unique_ptr 항목) {private_abi :: AddItem (item.release()); }}'다시 구현할 필요가 없으며 C 스타일 바인딩을 사용하는 협소 한 심 (shim)을 통해 전달합니다. 내부에서,'private_abi :: AddItem'은 그것을 고유 ptr에 리 바인드합니다. – Yakk

+0

@Yakk 오, 멋지다. 훨씬 더 간단 :) – user2079303