c++ - 工厂 : how to pass temporary smart pointers to functions. C++

标签 c++ factory smart-pointers temporary

我有一个类(class) 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 没有将指针向上传递到范围之外,这是完全安全的。

关于c++ - 工厂 : how to pass temporary smart pointers to functions. C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50858258/

相关文章:

c++ - 模板多态可以代替OO多态吗?

c++ - std::function 表达式不会产生接受 1 个参数的函数

ruby-on-rails - 在rake任务中使用factory_girl-获取未初始化的常量

c++ - 将 boost::scoped_ptr 更改为 std::unique_ptr

c++ - 如何使用基本身份验证发送 HTTP 请求?

c++ - 使用常量参数连接插槽

java - 当依赖 SimplePizzaFactory 时,PizzaStore 如何接受不同的工厂?

php - Laravel 5.7 无法找到名称为 [default] [App\User] 的工厂

c++ - 如何实现可以用void实例化的智能指针?

c++ - 使用weak_ptr的观察者模式