跟进:请转到this question,其中确实有一些有用的答案。
答案 0 :(得分:5)
考虑“更简单”的类型而不是对象。你会这样做:
void create() {
int *obj1 = new int();
int obj2;
_obj1 = obj1;
_obj2 = &obj2;
}
你认为这会有用吗?显然不是。 这很简单。你不能将指针传递给分配给堆栈的对象(并且,根据经验,你不应该将指针传递给你刚刚分配的对象。如果有人分配了一个对象,他就要负责免费它)
答案 1 :(得分:1)
堆对象本身没有错,无法管理它们的生命周期。
Stack对象具有以下属性:无论代码如何离开函数(异常,返回值),都将调用它们的析构函数。智能指针利用它来管理堆分配对象的生命周期(一种快乐的媒介?)
答案 2 :(得分:1)
C ++的一个基本设计原则是你不为你不使用的东西付费,这样C ++就可以用来编写高度优化的代码。无论您的语言如何,堆栈分配都更有效。