工厂:如何将临时智能指针传递给函数.C++



我有一个类Foo

class Foo;

一个返回指向它的指针的工厂:

std::unique_ptr<Foo> createFoo(); 

而且,由于 Herb 告诉我,一个对 Foo 的寿命没有特殊要求的普通函数应该采用普通的裸指针:

void plainf(Foo* f);

我的客户应该如何正确执行此操作?

plainF(createFoo());

如果他不得不写:

auto someName = createFoo();
plainF(someName.get()); 

您可以使用get成员函数,该函数返回指向拥有对象的原始指针。

plainF(createFoo().get());

createFoo()创建的临时plainF不会超出范围。只要plainF不将指针传递到范围之外,这是完全安全的。

如果不需要参数plainF可为空,还可以更改其签名以通过引用获取参数,从而允许语法稍微不那么冗长:

std::unique_ptr<Foo> createFoo(); 
void plainf(Foo& f);
plainF(*createFoo());

NathanOliver的回答中提到的所有终身考虑因素都适用,因此使用起来同样安全。

请注意,这意味着createFoo永远不会返回空unique_ptr。因此,如果允许该功能失败,则必须通过其他方式指示该错误,例如。通过引发异常。

相关内容

  • 没有找到相关文章

最新更新