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