对工厂方法使用堆栈分配而不是堆分配

Using Stack Allocation instead of Heap allocation for factory methods

本文关键字:分配 堆栈 工厂 方法      更新时间:2023-10-16

我正在尝试重构一些代码。当前代码遵循如下模式:

function f() {
Transaction trans;
// Do Operation
trans.commit();
}

这里事务是具体的类。我想把它移到Interface,并使代码看起来像:

function f() {
ITransaction* trans = GetTransaction();
// Do Operation
trans->commit();
}
// Factory 
ITransaction* GetTransaction()
{
return new Transaction();
}

问题:我们开始在工厂方法中使用new,它现在进行堆分配。我想避免这样的堆分配,并仍然设法使用接口。有什么办法可以做到这一点吗?

谢谢,卡纳斯

你所能做的就是在栈上分配Factory类。

void function() {
    Factory factory{};
    auto transaction = factory.getTransaction(arguments...);
}

Factory可以看起来像:

class Factory {
    A aTransaction;
    B bTransaction;
    C correctTransaction;
    transactionBase* getTransaction(arguments...) { 
        //return one member based on arguments
    }
}

但是,如果您的参数允许使用模板,那么执行

之类的操作就会变得容易一些。
void function () {
    Factory<Arguments...> transaction;
}