gpt4 book ai didi

c++ - 公开类拥有的资源的正确方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:51:38 25 4
gpt4 key购买 nike

假设我有一个库,它有一个 Document类(class)。 Document 的一个实例可以拥有 Field 的多个实例. Field有多个子类(例如 IntegerFieldStringField ),甚至 API 用户也可以对其进行子类化并将子类实例提供给 Document (假设用户被允许开发一种自定义类型的数据来存储在一个字段中)。

我想公开 Field Document 拥有的实例通过 API,用户可以与他们交互,但不转移所有权

这样做的正确方法是什么?

我想过:

  • 曝光 const std::unique_ptr<Field>&引用 - 这感觉很丑
  • 暴露一个普通的Field*指针 - 这感觉不对,因为用户可能不确定是否应该删除实例
  • 使用 std::shared_ptr相反 - 这感觉很糟糕,因为所有权并未真正共享

例如,

class Document {
private:
std::map<std::string, std::unique_ptr<Field> > fields;
// ...
public:
// ...

// How is this done properly?
const std::unique_ptr<Field> &field(const std::string &name) {
return fields[name];
}
}

期待您的建议。
(我也欢迎有关 @Fulvio 建议的替代方法的建议。)

最佳答案

我会返回 Bar&(可能带有 const)。

用户需要了解,如果从 map 中删除元素,则引用将失效 - 但由于单一所有权模型,无论您做什么,都会出现这种情况。

关于c++ - 公开类拥有的资源的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23112178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com