首页 > 解决方案 > Factories: how to pass temporary smart pointers to functions. C++

问题描述

I have a class Foo

class Foo;

a factory returning a pointer to it:

std::unique_ptr<Foo> createFoo(); 

and, since I have been told by Herb that a plain function with no special claim on the lifetime of Foo should take plain naked pointers:

void plainf(Foo* f);

How is my client supposed to correctly do this?

plainF(createFoo());

He would not be happy if he had to write:

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

标签: c++factorysmart-pointerstemporary

解决方案


You can use the get member function which returns a raw pointer to the owned object.

plainF(createFoo().get());

The temporary created by createFoo() will not go out of scope until plainF has finished. So long as plainF doesn't pass the pointer up out of scope this is completely safe.


推荐阅读