2015-04-01 72 views
-4

我在一本C++书中读到,我们可以在C++中使用各种类实例。为什么作为指针的类实例使用堆而不是堆栈?

  1. 普通类实例
  2. 类实例如指针

例如:

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,它会使用Stack

+3

B是无效的语法。 – 2015-04-01 14:52:04

+2

你有反向:当你动态创建一个对象时,你会得到一个指向它的指针。你还能知道对象在哪里?您还可以使用地址运算符('&')制作指向具有自动存储持续时间的对象的指针。 – 2015-04-01 14:53:10

+2

我质疑将类实例分类为“指针”和“正常”的书。您可能会从找到更好的书中受益。 – 2015-04-01 14:58:07

回答

1

首先,让我们纠正语法:

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

我希望这个清除了事情,如果不是,我建议回到基础知识,并寻找指针。