在阅读了有关列表, 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/