如果我有一个二叉树,其中每个节点只包含指向子节点的指针,那么
unique_ptr效果非常好.
对.
如果我希望每个节点都有一个父指针,那么情况就不那么好了,因为一个节点可能有三个指向它的指针
你应该区分拥有指针和观察指针之间的指针.
拥有原始 拥有指针是一个坏主意和错误和泄漏的来源; 另一方面,在许多情况下,具有原始 观察指针可以很好(只要观察到的对象仍然是"活的").
在您的情况下,您可能需要考虑一种设计,其中每个节点包含unique_ptrs到子节点,因为它们拥有指针,并且使用智能拥有指针unique_ptr在这种情况下效果很好.
另一方面,子节点可以使用非拥有指针引用它们的父节点(子节点"不拥有"它们的父节点,子节点只观察它们的父节点),并且原始指针可以正常工作作为非拥有观察指针.
作为旁注,当你/如果你使用shared_ptr你必须注意周期,就好像你没有正确地打破它们,那么你有泄漏(未发布的对象).另一方面,通过拥有unique_ptrs 指向孩子的父母,以及孩子通过原始观察指针观察他们的父母,对我来说似乎是一个更简单的设计.