假设我正在 C++ 中创建一个 STL 映射对象,即map<string,char>mymap``$
. 现在,我想知道内存是如何分配给这个对象的?我的困惑是没有动态分配,我们事先不知道容器的大小。那么,从哪里以及如何将内存分配给对象mymap?
问问题
159 次
2 回答
3
没有动态分配
当然有,但它在引擎盖下。std::map
通常存储为树,因此每当插入新对象时都会分配一个新节点。动态地。仅仅因为您没有明确地 write new
,并不意味着它不会在幕后发生。
在 的析构函数上std::map
,节点被自动删除。但是请注意,如果节点包含动态分配的对象,则映射不会删除这些对象。
于 2012-07-16T19:43:11.863 回答
1
那么,内存是从哪里以及如何分配给对象 mymap 的呢?
所有标准容器的默认分配器是std::allocator
,您的容器从哪里获取内存并释放到它用完内存。您可以使用自定义分配器,然后根据需要跟踪所有分配和解除分配。
于 2012-07-16T19:43:02.763 回答