我真的很喜欢使用类似的代码风格
class Node {
public:
std::optional<std::unique_ptr<Node>> left;
std::optional<std::unique_ptr<Node>> right;
Key key;
Val val;
};
与使用malloc/delete和nullptr检查的C风格树相比,性能如何?会有什么演出受到影响吗?
使用std::optional<std::unique_ptr<Node>>
会导致一些空间损失,并可能在运行时进行额外的布尔检查。
但是CCD_ 2具有";"非所有";状态,在这种情况下;包含";nullptr
,其应当足以表示无值状态。
class Node {
public:
std::unique_ptr<Node> left;
std::unique_ptr<Node> right;
Key key;
Val val;
};
甚至有一个方便的operator bool()
来检查是否有相关的值。
与原始指针解决方案相比,上面的代码在编译时应该没有性能损失。