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

时间:2016-11-08 06:31:36

标签: c++ oop design-patterns heap-memory stack-memory

我正在尝试重构一些代码。目前该代码遵循以下模式:

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,现在可以进行堆分配。我想避免这种堆分配,仍然设法使用接口。 有没有办法实现这个目标?

谢谢, 凯拉斯

1 个答案:

答案 0 :(得分:1)

你可以做的就是在堆栈上分配Factory类。

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

工厂看起来像:

class Factory {
    A aTransaction;
    B bTransaction;
    C correctTransaction;

    transactionBase* getTransaction(arguments...) { 
        //return one member based on arguments
    }
}

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

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