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

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

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

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/

相关文章:

c++ - 使用 Qt 4 在 C++ 中设计模式

c# - 自定义访客模式实现

c++ - 为什么 CRC 和 C++ 代码版本的 CRC 计算不同?

python - 如何使用 Python 读取未签名的短裤?

c++ - 你如何在 C++ 中四舍五入小数位?

c++ - 在 64 位 mac 上编译 OpenCV 代码

php - 在抽象类中声明的方法中从子项中获取常量覆盖

python - 为什么 numpy 方法可以在 pandas 数据帧上工作?

Java : Object access with private fields

javascript - meteor :设计模式:为集合的每个字段(列)创建模板助手