如何在没有 '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
及其所有元素也会被销毁。
在这里阅读了数十个关于列表、向量、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
及其所有元素也会被销毁。