为什么C ++编译器创建一个对象堆而不是在堆栈中推送类对象?

时间:2015-09-03 19:16:58

标签: c++ object stack heap

在使用'new'关键字创建类对象时,为什么创建对象堆而不是堆栈?堆栈不是更好的选项,因为它更快,执行连续分配而不需要手动删除(free / delete) ? 如果特定类的对象具有相同的模板,那么为什么我们需要动态分配?(堆的理由) [×××请注意,我的疑问不是程序员必须选择哪个选项,而是关于编译器在上述情况下的行为方式。×××]

1 个答案:

答案 0 :(得分:3)

基本上,堆栈创建的对象不能在它们创建的函数之外具有生命周期。这是堆的最明显的基本原理。

Object * foo()
{
  Object o;
  return &o;  // undefined behaviour, because 'o' ceases to exist once the function returns.
}