对工厂方法使用堆栈分配而不是堆分配
Using Stack Allocation instead of Heap allocation for factory methods
我正在尝试重构一些代码。当前代码遵循如下模式:
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;
}
相关文章:
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 从堆栈分配的原始指针构造智能指针
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 巨大的内存分配:堆栈与堆
- 有效地分配堆栈对象(由函数的值返回)到堆?
- 为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到
- 为什么分配堆内存比分配堆栈记忆更快
- 安全分配堆栈分配的阵列
- 附加到具有非动态分配堆栈的向量
- 是否随作用域分配和解除分配堆栈帧
- 在执行中脱离堆栈对象的范围之前,请分配堆栈对象
- 全局阵列分配 -- 堆栈或堆
- 如何使新操作员超载以分配堆栈
- 具有类作用域的动态分配堆栈内存
- 如何在 Linux 下为可执行文件分配堆栈
- 内存分配堆栈
- 成员函数内存分配堆栈或堆
- 在 c++ 中重新分配堆栈上的对象
- 防止为类和派生类分配堆栈
- 如何防止msvc++为switch语句过度分配堆栈空间?