我现在处于这样的情况,我不确定应该使用哪种类型的智能指针,因为我不确定我的类的所有用例。我可以使用shared_ptr,但当我不一定需要共享所有权时,我不喜欢在我的代码中到处传递shared_ptr。
Herb Sutter的这篇文章说,当你不确定时,使用unique_ptr,并在必要时转换为shared_ptr。这正是我想做的,但我不清楚应该如何做,考虑以下示例:
class Example
{
public:
Example(): _ptr(std::make_unique<Node>()) {}
std::unique_ptr<Node>& getPtr()
{
return _ptr;
}
private:
// I am unsure if I will eventually need shared ownership or not
std::unique_ptr<Node> _ptr;
};
Example* example = new Example();
// Some function somewhere
void f()
{
// I've decided I need shared ownership, converting
std::shared_ptr<Node> ptr(std::move(example->getPtr()));
// Oops, example is no longer valid...
}
如果有更好的方法来处理这种情况,我很乐意听取建议。
shared_ptr
,因为你想要(潜在地)共享所有权。对于工厂可能会存在疑问。 - Jarod42getPtr
是一个糟糕的接口。你不应该像那样传递unique_ptr
。如果有人想要访问指针,他们应该获取一个Node*
。 - Nicol Bolasconst
?”的问题,回答是用户可以使用相同的大小,因此不修改向量...但是用户可能会修改它。对于您的指针似乎也是同样的情况。 - Jarod42