对象列表是应该存储在堆还是堆栈上?

Ale*_*der 3 c++ heap stack memory-management object

我有一个对象(A),它有一个由对象(B)组成的列表.列表(B)中的对象是指针,但列表本身应该是指针吗?我正在从Java迁移到C++,但仍然没有完全习惯堆栈/堆.该列表不会在类A之外传递,只传递列表中的元素.为了以防万一,将列表本身分配在堆上是一种好习惯吗?

此外,包含列表(A)的类是否也应该在堆本身上?像列表一样,它不会被传递.

And*_*ant 6

请记住这一点

  1. 如果Object-A也在堆栈上,则列表将仅在堆栈上
  2. 即使列表本身不在堆上,它也可以从堆中分配其存储.这就是std :: list,std :: vector和大多数C++列表的工作方式 - 原因是基于堆栈的元素无法增长.
  3. 这些天大多数堆栈大约是1mb,所以在你需要担心它之前你需要一个非常大的大型对象列表.即使你的堆栈只有大约32kb,你可以存储接近八千个指针,然后才会出现问题.

对C/C++中的显式内存管理不熟悉的IMO人员可能倾向于过度思考这些事情.

除非你正在写一些你知道会有数千个大小对象的东西,否则只需将列表放在堆栈上即可.除非你在一个函数中使用巨型C风格的数组,否则由于上面的#1和#2,列表使用的内存最终会在堆中结束.