如何在没有'new'的情况下将新对象实例添加到std :: list

时间:2015-08-15 18:27:43

标签: c++ list object memory-management instantiation

在这里读了很多关于列表,向量,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 ++是一个不同的野兽,我正试图掌握它。

1 个答案:

答案 0 :(得分:4)

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

只需在list课程上创建一个RecordList成员,就像这样:

std::list<Record> records_;

然后只需使用emplace_back添加行:

records_.emplace_back(<whatever parameters `Record` constructor takes>);

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