在C ++中有效使用堆栈与堆内存分配

时间:2013-07-23 20:49:22

标签: c++ memory-management

我正在开发一个大型的复杂模型(大多数是简单的数学,主要是代数,但有很多计算)。假设我必须做一次所有事情,我做了我的初始竞标,但现在范围已扩大,我需要多次运行整个模型(在相同的基础假设集上,但使用不同的数据集)。 / p>

根据我的初始需求,我创建了一堆类,然后在main函数中创建了这些类的动态实例,并在我去的时候通过引用传递给每个函数。这样,在主函数结束时,我可以在所有函数运行后执行所有必要的报告/输出。我的问题是如何现在修改我的主函数以允许多次迭代。下面是一些代码示例,后面是我的问题:

 // Sample class declaration (in main)
 vector<PropLevelFinancials> PLF;

// Sample function call (functions in other header files)
ProcessPropFinancials(vector<PropLevelFinancials>& PLF);

// Reporting at the end of main (functions in other header files)
OutputSummaryReport(vector<PropLevelFinancials>& PLF, other objects);

// What I need to do next
// Clear/Delete PLF and other objects, iterate through model again

我对目前节目的速度和结果非常满意,所以不需要在这方面提供大量的意见(尽管总是欢迎建议)。

我应该如何实现循环访问多个数据集的能力(我显然知道如何进行循环,我的问题是关于内存管理)?速度至关重要。我想基本上删除我创建的类对象的现有实例(PLF),然后在对象的新实例上再次运行所有实例。这是我应该使用的情况类型&#34; new&#34;和&#34;删除&#34;管理迭代?这会改变我上面概述的函数调用吗?如果我想避免使用new和delete(留在堆栈中),我的选择是什么?

1 个答案:

答案 0 :(得分:4)

没有。如果没有高度特殊原因,请不要使用newdelete

std::vector<T>提供了您可以使用的clear()成员。如果您需要,我建议您为自己的类实现类似的类。或者您可以简单地执行PLF = std::vector<T>();,假设您根据最基本的C ++指南编写它们,这对您自己的UDT没有任何修改会更好一点。