我应该何时使用“新”?

可能重复:
我应该什么时候在C ++中使用新的关键字?

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

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

struct Graph {
    int ID;
}

情况1:

Graph g;
g.ID = 1;

情况2:

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

这两种情况是一样的吗? 有什么不同?


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

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

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

g->ID = 1;

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


区别在于数据分配的位置。

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

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

链接地址: http://www.djcxy.com/p/96529.html

上一篇: When should I use "new"?

下一篇: What does the 'new' keyword do in c++?