C ++动态与堆栈对象以及如何使用它们

时间:2011-02-20 09:34:54

标签: c++ stack heap

  
    

跟进:请转到this question,其中确实有一些有用的答案。

  

3 个答案:

答案 0 :(得分:5)

考虑“更简单”的类型而不是对象。你会这样做:

void create() {
    int *obj1 = new int();
    int obj2;

    _obj1 = obj1;
    _obj2 = &obj2;
}

你认为这会有用吗?显然不是。 这很简单。你不能将指针传递给分配给堆栈的对象(并且,根据经验,你不应该将指针传递给你刚刚分配的对象。如果有人分配了一个对象,他就要负责免费它)

答案 1 :(得分:1)

堆对象本身没有错,无法管理它们的生命周期。

Stack对象具有以下属性:无论代码如何离开函数(异常,返回值),都将调用它们的析构函数。智能指针利用它来管理堆分配对象的生命周期(一种快乐的媒介?)

答案 2 :(得分:1)

C ++的一个基本设计原则是你不为你不使用的东西付费,这样C ++就可以用来编写高度优化的代码。无论您的语言如何,堆栈分配都更有效。