可以执行以下操作吗?显然,不会阻止调用者删除裸指针。我应该使用shared_ptr并返回shared_ptr吗?对此来说似乎太沉重了。
class A
{
B* GetB() { return pointer.get(); }
private:
unique_ptr<B> pointer;
};
答案 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
本身(因为你要保留副本作为成员)。
如果保证分配对象(即指针永远不为空),我会返回一个引用。