在阅读了有关列表, vector ,new运算符,RAII和this的关于内存分配的非常好描述的字面上的数十个答案之后,我仍然无法想象满足以下需求的实际实现。注意:我对.net及其内存管理经验最为丰富,如果可以帮助您找到答案的话。

基本上,我有一个类(例如class RecordFile {}),它以特​​定格式封装了文本文件。每行等同于一条我想添加到std::list<Record>实例拥有的RecordList的记录,其中class Record从文件中的单行捕获数据。

RecordList类中,我有一个RecordList::Read()方法,该方法逐行读取文件,创建一个新的Record实例并将其添加到RecordList实例拥有的列表中。

在此Read()方法中,是一个循环访问文件行的循环,从而创建了新的Record实例。显然,一旦文件被读取并且Read()方法完成,我希望记录列表保留在RecordList对象中,但是如果不使用'new'运算符,我将看不到如何做到这一点。

如何在不违反看似基本规则的情况下用c++执行此任务?在.net中,这将是微不足道的,并且完全按照所述方式执行,不会对性能或内存泄漏造成任何风险。我了解c++是另一种野兽,并且正在设法与之抗衡。

最佳答案

list容器为您处理内存管理。

只需在list类上创建一个RecordList成员,如下所示:

std::list<Record> records_;

然后只需使用emplace_back添加行:
records_.emplace_back(<whatever parameters `Record` constructor takes>);

RecordList被销毁时,list及其所有元素也将被销毁。

关于c++ - 如何在没有 'new'的情况下将新对象实例添加到std::list,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32027926/

10-10 19:13