为什么类实例作为指针使用堆而不是堆栈?

时间:2015-04-01 14:49:49

标签: c++

我在c ++书中读到,我们可以使用c ++中的各种类实例。

  1. 普通班级实例
  2. 类实例作为指针
  3. 例如:

    class Person {
    public:
        Person();
        Person(std::string name, int age){
    
        }
    };
    
        //This will be created in the stack
        A :  Person John("John",68);
        //This will be created in the heap
        B :  Person *Marcel("Marcel",31);
    

    那么,为什么当我们使用指针(A)创建对象时使用以及为什么在B中,它将使用堆栈

1 个答案:

答案 0 :(得分:1)

首先,让我们更正语法:

int main()
{
Person John("John",68);  //statement 1
Person *Marcel = new Person("Marcel",31); //statement 2
....
}
  • 第一个语句确实创建了Person类的实例, 在堆栈上。
  • 第二个语句在堆栈上声明类型为Person的指针,并为其分配堆上的类Person的实例,因为它是动态分配的。因此,指针(即保存类实例地址的变量)驻留在堆栈上,但实际的实例是在堆上分配的。

我希望这可以解决问题,如果没有,我建议回到基础并查找指针。