在阅读了几十个关于列表、 vector 主题的答案后,new
运算符(operator)、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
容器会为您处理内存管理。
只需在 RecordList
类上创建一个 list
成员,如下所示:
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/