我刚读到关于std::allocator的文章。在我看来,使用它比使用new和delete要复杂得多。
使用allocator,我们必须显式地分配堆内存,构造它,销毁它,然后最后释放内存。那么它为什么被创造出来呢?
在哪些情况下可以使用它,什么时候应该使用它而不是新的和删除的?
发布于 2015-07-11 15:57:23
std::allocator是标准库容器的默认内存分配器,您可以替换自己的分配器。这允许您控制标准容器如何分配内存。但我不认为您的问题是专门关于std::allocator的,而是分配内存的策略,然后在该内存中构造对象,而不是使用new T[N]。
其原因是new T[N]不允许您控制调用什么构造函数。它迫使你同时构造你的所有对象。这对于例如std::vector来说是很糟糕的,在这里您只想偶尔分配。
使用原始内存分配器,您可以分配一定数量的内存,这决定了您的容量。然后,当用户将项添加到向量(使用他们选择的构造函数)时,您可以在这个内存中构造合适的对象。
然后,当内存耗尽时,分配的内容会更多,通常是原来的两倍。如果std::vector使用new T[N],那么每当您想要添加或删除元素时,它都必须重新分配,这对性能影响很大。您还将被迫对所有对象使用默认构造函数,这对std::vector可以容纳的对象类型设置了不必要的限制。
https://stackoverflow.com/questions/31358804
复制相似问题