【问题标题】:Memory for std::queue allocated on heap or stack在堆或堆栈上分配的 std::queue 内存
【发布时间】:2019-05-23 01:49:38
【问题描述】:

如果我使用std::queue<ClassA> my_queue,为队列中的对象分配的内存在哪里?如果我不使用指针将对象存储在队列中,它还会在堆上分配吗?

【问题讨论】:

  • 这取决于底层容器中使用的分配器类。
  • @πάνταῥεῖ std::queue<int> 怎么样?
  • @debonair -- 尝试自己实现std::queue。您很快就会发现实现它的唯一实用方法是使用new 或某种动态内存分配来维护数据结构。

标签: c++


【解决方案1】:

如果没有提供替代allocatorcontainer:免费商店,因为它使用std::deque

【讨论】:

    【解决方案2】:

    所有标准容器都使用分配器对象来满足其内存管理需求。默认情况下,除非您提供自己的,否则他们使用std::allocator。这包括std::deque<T>,这是std::queue<T> 使用的。 std::allocator 使用空闲存储区(newdelete 使用的内存空间),这是创建 std::queue 元素的位置。

    std::deque 和几乎所有其他使用动态分配对象的标准类型在内部管理该内存,使用通常对其用户不可见的指针。并不是因为您没有动态分配对象,所以该对象无法在内部为自己的目的动态分配内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-28
      • 2020-09-02
      • 2018-07-24
      • 2011-10-09
      • 2013-01-25
      • 1970-01-01
      • 2019-05-17
      相关资源
      最近更新 更多