gpt4 book ai didi

c++ - 为工厂方法使用堆栈分配而不是堆分配

转载 作者:行者123 更新时间:2023-11-28 05:26:15 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com