假设我有一个树结构,其节点定义如下:
struct Node
{
byte key_part;
unique_ptr<Node> left, right, middle;
TValue value;
};
unique_ptr<Node> root;
这里的语义是正确的,我绝对不希望其他人掌握我的节点本身。它由我的树唯一持有。
但是,我想添加一个内部辅助函数,以便根据内部语义搜索树并向节点结构返回 ...something?。这是一个私有函数,仅在内部使用,用于插入节点并用外部数据填充它、删除节点或向value
外部返回字段(而不是节点本身)。节点绝不会泄漏到外部。
那么我该如何编写该函数呢?我不能unique_ptr<Node>
从中返回,对吧?否则移动语义将生效。我可以返回一个指针,但这似乎会破坏系统,而且会导致别名问题。引用是类似的,但它阻止我使用它nullptr
来标记未找到结果。本质上,这个的返回类型是什么:
/* return type here */ search(const span<byte>& key)
{
auto node = /* recursive search here, etc */;
return /* what do I put here, given I have a unique_ptr<Node> reference? */;
}