使用工厂函数创建std :: shared_ptr

问题描述

我有一个Foo,它不是直接实例化的,而是通过静态工厂方法Foo Foo::create_foo()来实现的。

现在,我想创建一个std::shared_ptr<Foo>。通常我会用

auto ptr = std::make_shared<Foo>();

在使用工厂时如何实现相同的目标?

我知道我可以重写create_foo()以直接返回一个指针,但是我想知道是否有解决方案而不更改方法

解决方法

如果Foo类具有复制或右值构造函数重载(隐式或显式),则可以将其用作:

auto foo = std::make_shared<Foo>(Foo::create_foo());