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中,您的意思是