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

How to add new object instances to std::list without 'new'

在这里阅读了数十个关于列表、向量、new 运算符、RAII 和 this 内存分配的非常好的描述的答案,我仍然无法想象一个实际的实现满足以下需求。请注意,如果这有助于指导任何答案,我在 .net 及其内存管理方面经验最丰富。

基本上,我有 class(比如 class RecordFile {})以特定格式封装文本文件。每行相当于一条记录,我想将其添加到 RecordList 实例拥有的 std::list<Record> 中,其中 class Record 从文件中的一行捕获数据。

RecordList class 中,我有一个方法 RecordList::Read() 逐行读取文件,创建一个新的 Record 实例并将其添加到RecordList 实例拥有的列表。

在这个 Read() 方法中有一个循环遍历文件的行,创建新的 Record 实例。很明显,一旦文件被读取并且 Read() 方法完成,我希望记录列表保留在 RecordList 对象中,但是如果不使用 'new' 我不知道如何做到这一点运算符。

如何在不违反看似基本规则的情况下在 c++ 中执行此任务?在 .net 中,这将是微不足道的,并且完全按照所说执行,不会对性能或内存泄漏造成任何风险。我知道 C++ 是一个不同的野兽,我正在努力掌握它。

list 容器会为您管理内存。

只需在您的 RecordList class 上创建一个 list 成员,如下所示:

std::list<Record> records_;

然后使用 emplace_back:

简单地添加行
records_.emplace_back(<whatever parameters `Record` constructor takes>);

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