我什么时候应该使用“新”?

时间:2012-02-28 16:06:33

标签: c++

  

可能重复:
  When should I use the new keyword in C++?

我不知道案例1和案例2之间的区别:

我在下面定义了一个结构:

struct Graph {
    int ID;
}

案例1:

Graph g;
g.ID = 1;

案例2:

Graph* g = new G();
g.ID = 1;

这两个案例是否相同?有什么区别?

4 个答案:

答案 0 :(得分:3)

在情况1中,g使用的内存在堆栈上分配,这意味着当它返回时它会自动释放。

在第2种情况下,g使用的内存在堆上分配,这意味着只有在使用delete运算符显式删除时才会释放它。

此外,在情况2中,因为g是一个指针,你应该使用 - >访问g的字段。操作者:

g->ID = 1;

答案 1 :(得分:1)

在案例2中,您的意思是new Graph,然后是g->ID = 1。尝试从http://en.wikipedia.org/wiki/New_(C%2B%2B开始。简短的说明,案例1在编译时分配内存,而案例2在运行时分配它。

答案 2 :(得分:1)

不同之处在于分配数据的位置。

在案例1中,Graph结构的数据在堆栈上分配。您可以通过名称“g”访问它。

在案例2中,Graph结构的数据在堆上分配。您可以通过指向该数据的指针访问它,该数据通过名称“g”保存。

答案 3 :(得分:1)

在案例1中,您将在本地范围内的堆栈上创建图表。因此,当范围结束时,它将自动被删除。因此,g是该图的实际实例化版本。

在第二种情况下,您将图表分配到堆上。然后g只是一个指针,在你明确这样做之前不会被删除。