将一个裸指针从类中返回到unique_ptr是完全可以的

时间:2011-04-27 21:54:09

标签: c++

可以执行以下操作吗?显然,不会阻止调用者删除裸指针。我应该使用shared_ptr并返回shared_ptr吗?对此来说似乎太沉重了。

class A
{
   B* GetB() { return pointer.get(); }
private:
   unique_ptr<B> pointer;
};

2 个答案:

答案 0 :(得分:4)

我认为它应该可以正常工作,在文档中明确指出这样的指针不是delete d。

但是,我可能会返回一个引用:在这种情况下隐含了调用者不能delete任何内容。

class A
{
   B & GetB() { return *(pointer.get()); }
private:
   unique_ptr<B> pointer;
};

编辑 事实证明指针可以是NULL;在这种情况下,必须避免引用。

可以创建某种聪明笨do_not_delete_me_ptr类,它只是封装了指针,并且明确表示你不能删除它,但我认为这也是过度的。 ;)

答案 1 :(得分:0)

来自unique_ptr上的提升文档:

  

unique_ptr不是CopyConstructible,也不是CopyAssignable,但它是MoveConstructible和Move-Assignable。

无论如何你都不能返回unique_ptr本身(因为你要保留副本作为成员)。

如果保证分配对象(即指针永远不为空),我会返回一个引用。