API返回类型 - 强制智能指针到用户?

stu*_*man 3 c++ pointers

假设我有一个创建并返回对象的API边框函数:

<?> createOneObject();
Run Code Online (Sandbox Code Playgroud)

将对象返回给调用者的最佳方法是什么?

  • 返回raw MyObject*并让调用者自己处理指针
  • 返回 std::shared_ptr<MyObject>
  • 别的什么?

eer*_*ika 6

要看.

通常,返回原始指针是不好的,因为类型本身不会传递所有权.用户应该删除指针吗?如果是,那怎么样?如果没有,那么图书馆什么时候做呢?用户如何知道指针是否仍然有效?这些事情必须记录下来,懒惰的程序员可能会跳过阅读文档.但是,如果您的API必须可以从C或其他语言调用,那么原始指针可能是唯一的选择.

共享指针在特殊情况下可能很有用,但它们确实有开销.如果您不需要共享所有权,那么使用共享指针可能会过度.

除非有特殊原因要使用其他东西,否则我将使用唯一指针.

虽然,假设应该首先返回一个指针.另一个很好的选择可能是返回一个对象.

更具体一点:我有一个只存储id的玩家类,只提供了很多方法.在这种情况下,您更愿意按价值返回?

明确地.