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

标签 c++ list object memory-management instantiation

在阅读了几十个关于列表、 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/

相关文章:

c++ - Unresolved inclusion <GL/glut.h>

java - 总结整数列表的最快方法是什么

r - 如何将 grobs 存储在列表中并将它们传递给 grobTree()?

javascript - 如何在 JavaScript 中根据对象值对数组进行排序?

javascript - 我不明白该程序的工作原理

c++ - 使用 ImageMagick 修改图像对比度/亮度

c++ - 我如何区分这两个运算符重载?

java - 使用 Java 可序列化保存第二个对象的数组

c++ - 如何将MAC地址转换为对应的IP地址?

list - Erlang:如何避免列表被翻译成 ASCII 字符串?