在这里读了很多关于列表,向量,new
运算符,RAII和this内存分配的非常好的描述的答案,我仍然无法想象满足以下需要。注意我对.net及其内存管理最有经验,如果这有助于指导任何答案。
基本上,我有一个类(例如class RecordFile {}
),它以特定格式封装文本文件。每行等于我想要添加到std::list<Record>
实例拥有的RecordList
的记录,其中class Record
从文件中的单行捕获数据。
在RecordList
类中,我有一个方法RecordList::Read()
,它逐行读取文件,创建一个新的Record
实例并将其添加到{所拥有的列表中{1}}实例。
在这个RecordList
方法中,循环遍历文件的行,创建新的Read()
实例。显然,一旦读取文件并且Record
方法完成,我希望记录列表在Read()
对象中保留,但我不知道如何在不使用'new'运算符的情况下执行此操作。
如何在不违反基本规则的情况下在c ++中执行此任务?在.net中,这将是微不足道的,并且完全按照所述执行,而不会对性能或内存泄漏造成任何风险。我理解c ++是一个不同的野兽,我正试图掌握它。
答案 0 :(得分:4)
list
容器会为您处理内存管理。
只需在list
课程上创建一个RecordList
成员,就像这样:
std::list<Record> records_;
然后只需使用emplace_back
添加行:
records_.emplace_back(<whatever parameters `Record` constructor takes>);
RecordList
被销毁时,list
及其所有元素也被销毁。