假設我需要兩個工廠的抽象基類及其派生類(我沒有訪問實際的構造函數)。在效率和代碼風格方面,哪個是最好的構造?抽象基類和派生類的工廠函數的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