我有一个计算,它返回对大小为兆字节的集合的const引用。一些结果存在于堆栈上,一些结果应该被计算和缓存,一些结果应该被计算而不是缓存。在前两种情况下,函数可以通过const lvalue引用返回,但在最后一种情况下,调用者需要获取该值的所有权,该值不会在缓存中持久存在。
我想为这个计算提供单个函数接口,这样调用者就不需要首先尝试懒惰地计算缓存所拥有的结果,然后再回到取得非缓存结果的所有权。另外,我想避免使用共享指针来保持所有权。
1)如果必须转让所有权,则分配出参数,如下面的签名:
const Result& LookupOrCompute(Cache& cache, const Input& input, Result& optionalOwnership)
2)编写带有两个子类的自定义智能指针,一个承担所有权,另一个不承担所有权。
我倾向于第一种选择。在保持类型和内存安全性的同时,在C ++中使用更简洁,更惯用的方法吗?