I want to create a factory class like below, but I am not confident this is the right way to use std::move. I don't want to use too many shared_ptrs, since shared_ptr inside another shared_ptr is really ugly and sometimes confusing...
Option 1:
class Foo
{
public:
Foo(Foo&& f){...}
}
class FooFactory
{
public:
static Foo&& createFoo(...)
{
Foo temp(...);
return std::move(temp);
}
}
main()
{
Foo f=FooFactory::createFoo(...);
}
Option 2:
class FooFactory
{
public:
static Foo createFoo(...)
{
Foo temp(...);
return temp;
}// rely on compiler for optimization
}
main()
{
Foo f=std::move(FooFactory::createFoo(...));
}