我有一个具有unique_ptr成员的类,该类保留对该对象的唯一所有权.但是,外部类可能需要访问此对象.在这种情况下,我应该只返回一个原始指针吗?shared_ptr似乎不正确,因为这意味着访问类现在共享该内存的所有权,而我想明确表示原始类是唯一的所有者.
例如,也许我有一个拥有根节点的树类.另一个类可能希望由于某种原因探索树,并且需要指向根节点的指针来执行此操作.部分实现可能如下所示:
class Tree
{
public:
Node* GetRoot()
{
return m_root.Get();
}
private:
std::unique_ptr<Node> m_root;
};
Run Code Online (Sandbox Code Playgroud)
这是不好的做法吗?什么是更好的解决方案?
更常规的实现可能是Tree暴露迭代器或提供visit探索树的机制,而不是暴露Tree自身的实现细节.公开实现细节意味着您永远不能更改树的底层结构,而不会有破坏该代码的知道多少客户端的风险.
如果你绝对坚持需要这个,至少返回指针const,例如const Node* GetRoot() const因为外部客户端绝对不应该改变树结构.