0

假设我正在 C++ 中创建一个 STL 映射对象,即map<string,char>mymap``$. 现在,我想知道内存是如何分配给这个对象的?我的困惑是没有动态分配,我们事先不知道容器的大小。那么,从哪里以及如何将内存分配给对象mymap

4

2 回答 2

3

没有动态分配

当然有,但它在引擎盖下。std::map通常存储为树,因此每当插入新对象时都会分配一个新节点。动态地。仅仅因为您没有明确地 write new,并不意味着它不会在幕后发生。

在 的析构函数上std::map,节点被自动删除。但是请注意,如果节点包含动态分配的对象,则映射不会删除这些对象。

于 2012-07-16T19:43:11.863 回答
1

那么,内存是从哪里以及如何分配给对象 mymap 的呢?

所有标准容器的默认分配器是std::allocator,您的容器从哪里获取内存并释放到它用完内存。您可以使用自定义分配器,然后根据需要跟踪所有分配和解除分配。

于 2012-07-16T19:43:02.763 回答