我什么时候应该在堆上分配?(C++)

amc*_*amc 7 c++ memory memory-management

我真的不明白什么时候应该在堆上分配内存,什么时候应该在堆栈上分配内存。我真正知道的是,在堆栈上分配速度更快,但由于堆栈较小,我不应该使用它来分配大型数据结构;在决定在哪里分配内存时我还应该考虑哪些其他因素?编辑:我应该在哪里分配实例变量?

Kla*_*aim 7

  1. 大多数对象在堆栈上分配。生命周期==范围。
  2. 如果需要手动控制对象的生命周期,请将其分配在堆上。
  3. 如果对象很大而堆栈不够大,则将其分配在堆上。
  4. 在情况 2 和 3 中使用(糟糕的名称)RAII 习惯用法,它允许您使用堆栈上的对象来操作可能是堆上对象的资源 - 一个很好的例子是像 std::shared_ptr/boost 这样的智能指针::shared_ptr。