假设我需要两个工厂的抽象基类及其派生类(我没有访问实际的构造函数)。在效率和代码风格方面,哪个是最好的构造?抽象基类和派生类的工厂函数的C++返回类型
1)让所有工厂返回一个shared_ptr。这是统一的,但会导致许多派生类的不必要的shared_ptrs,因为它们在客户端代码中直接取消引用。
std::shared_ptr<Derived> createDerived(Argument arg)
{
return std::make_shared<Derived>(arg);
}
std::shared_ptr<AbstractBaseClass> createABC(Argument arg)
{
if (suchAndSo(arg))
return createDerived(arg);
else
return nullptr; // or createSomeOtherDerivedClass
}
int main()
{
Argument Arg;
Derived d = *createDerived(arg);
auto pAbc = createABC(arg);
}
2)设派生类的工厂返回一个值,并让ABC工厂返回它是通过使用make_shared和源性拷贝构造(其导致许多拷贝构造调用构造的共享PTR)
Derived createDerived(Argument arg)
{
return Derived(arg);
}
std::shared_ptr<AbstractBaseClass> createABC(Argument arg)
{
if (suchAndSo(arg))
return make_shared<AbstractBaseClass>(createDerived(arg));
else
return nullptr; // or createSomeOtherDerivedClass
}
int main()
{
Argument Arg;
Derived d = createDerived(arg);
auto pAbc = createABC(arg);
}
你打算做一些多态函数吗? – doctorlove
@doctorlove你不能有一个没有多态的*抽象*基类(我认为你的意思是*虚拟*)函数,你能吗? :) – user2079303