我正在尝试重构一些代码。目前该代码遵循如下模式:
function f() {
Transaction trans;
// Do Operation
trans.commit();
}
这里的事务是具体的类。我想将它移动到界面并使这段代码看起来像这样:
function f() {
ITransaction* trans = GetTransaction();
// Do Operation
trans->commit();
}
// Factory
ITransaction* GetTransaction()
{
return new Transaction();
}
问题:我们开始在工厂方法中使用 new here,它现在进行堆分配。我想避免这样的堆分配并且仍然设法使用接口(interface)。 有什么办法可以实现吗?
谢谢, 凯拉斯
最佳答案
您可以做的是在堆栈上分配 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;
}
关于c++ - 为工厂方法使用堆栈分配而不是堆分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40480375/