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

C++ 如何在没有“new”的情况下将新对象实例添加到std::list,c++,list,object,memory-management,instantiation,C++,List,Object,Memory Management,Instantiation,在阅读了大量关于列表、向量、新操作符、RAII以及内存分配的详细描述之后,我仍然无法想象一个实际的实现能够满足以下需求。注:我在.net及其内存管理方面最有经验,如果这有助于指导任何答案的话 基本上,我有一个类,比如说类RecordFile{},它以特定的格式封装了一个文本文件。每一行都相当于我想添加到RecordList实例拥有的std::list中的一条记录,其中类记录从文件中的一行捕获数据 在RecordList类中,我有一个方法RecordList::Read,它逐行读取文件,创建一个新

在阅读了大量关于列表、向量、新操作符、RAII以及内存分配的详细描述之后,我仍然无法想象一个实际的实现能够满足以下需求。注:我在.net及其内存管理方面最有经验,如果这有助于指导任何答案的话

基本上,我有一个类,比如说类RecordFile{},它以特定的格式封装了一个文本文件。每一行都相当于我想添加到RecordList实例拥有的std::list中的一条记录,其中类记录从文件中的一行捕获数据

在RecordList类中,我有一个方法RecordList::Read,它逐行读取文件,创建一个新的记录实例并将其添加到RecordList实例拥有的列表中

在这个Read方法中,是一个循环,它遍历文件的行,创建新的记录实例。显然,一旦文件被读取并且read方法完成,我希望记录列表能够持久保存在RecordList对象中,但是如果不使用“new”操作符,我就看不到如何做到这一点

<>这个任务是如何在C++中执行的,而不违背什么基本规则?在.net中,这将是微不足道的,并且完全按照所说的那样执行,不会对性能或内存泄漏造成任何风险。我知道C++是一个不同的动物,我正试图掌握它。

< p>列表容器负责你的内存管理。< /P> 只需在RecordList类上创建一个列表成员,如下所示:

std::list<Record> records_;

当记录列表被销毁时,列表及其所有元素也会被销毁。

这很酷,因此元素严格地归其容器所有。这就是安放方法的全部意图吗?对于所有元素都属于同一个类家族而不是一个具体类型的列表,这是否也会起同样的作用?@JCollins安放方法的目的是在现场构造对象,而不是在其他地方构造对象,然后将其复制到容器中。不,它不适用于一系列对象,因为您需要智能指针unique\u ptr/shared\u ptr,它也可以为您处理生命周期。您也可以创建它们并为它们分配内存,而无需新建,检查函数make_unique/make_shared hanks imreal,这看起来像是c++14,这是一个比较普遍采用的标准吗?@JCollins我认为make_unique是c++14,但它在gcc 4.9上,make_shared是c++11,它被很好地采用了。无论如何,您都可以使用new安全地初始化unique_ptr。
records_.emplace_back(<whatever parameters `Record` constructor takes>);