在使用'new'关键字创建类对象时,为什么创建对象堆而不是堆栈?堆栈不是更好的选项,因为它更快,执行连续分配而不需要手动删除(free / delete) ? 如果特定类的对象具有相同的模板,那么为什么我们需要动态分配?(堆的理由) [×××请注意,我的疑问不是程序员必须选择哪个选项,而是关于编译器在上述情况下的行为方式。×××]
答案 0 :(得分:3)
基本上,堆栈创建的对象不能在它们创建的函数之外具有生命周期。这是堆的最明显的基本原理。
Object * foo()
{
Object o;
return &o; // undefined behaviour, because 'o' ceases to exist once the function returns.
}