【发布时间】:2019-03-04 10:02:20
【问题描述】:
请解释bsoncxx::document::value 和bsoncxx::document::view 之间的区别。 view 只是 value 类的代理吗?
【问题讨论】:
标签: c++ bson mongo-cxx-driver
请解释bsoncxx::document::value 和bsoncxx::document::view 之间的区别。 view 只是 value 类的代理吗?
【问题讨论】:
标签: c++ bson mongo-cxx-driver
是的,view 是 value 的代理。
【讨论】:
在 bsoncxx 库中,values 代表不可变资源的所有权,但不代表检查拥有资源的能力。要检查拥有的资源,您可以从value 获得view。这里的view 和value 类似于std::string 和std::string_view 之间的关系。通过将所有权与检查分离,我们可以为只需要查看数据的 API 提供一种廉价的类型,而在我们需要复制或接管资源所有权时使用一种更昂贵的 API。
【讨论】:
view 确实不会延长底层value 的生命周期。从给定的value 派生的所有views 的生命周期必须是所属`value 的生命周期的子集。