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