2012-07-16 105 views
0

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

+0

当然有动态分配(可能不一定是从开始,但肯定是在开始插入东西后)。这只是在课堂上。 – Jon 2012-07-16 19:43:12

回答

1

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

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

3

没有动态分配

肯定有,但它的引擎盖下。 std::map通常以树的形式存储,因此无论何时将新对象插入新节点,都会分配新节点。动态。仅仅因为你没有明确写出new,并不意味着它不会发生。

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

+0

请让我知道,如果内存是动态分配的,那么在引擎盖下是否释放内存? – nirprat 2012-07-16 19:58:00

+0

@nirprat是的,读最后一个短语。 – 2012-07-16 20:06:58