关于c ++:我什么时候应该使用“new”?


When should I use “new”?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
When should I use the new keyword in C++?

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

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

1
2
3
struct Graph {
    int ID;
}

情况1:

1
2
Graph g;
g.ID = 1;

案例2:

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

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


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

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

另外,在情况2中因为g是指针,你应该使用 - >运算符访问g的字段:

1
g->ID = 1;

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

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


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

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

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


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