我不知道案例1和案例2之间的区别:
我在下面定义了一个结构:
struct Graph {
int ID;
}
案例1:
Graph g;
g.ID = 1;
案例2:
Graph* g = new G();
g.ID = 1;
这两个案例是否相同?有什么区别?
答案 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只是一个指针,在你明确这样做之前不会被删除。