Ge *_*Yan 1 c++ pointers memory-management
int *createInt()
{
int *a = new int;
return a;
}
int main()
{
int *x = createInt();
*x = 10;
cout << *x << '\n';
delete x; // do I need this?
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我需要删除x吗?如果不这样做,会导致内存泄漏问题吗?
您似乎对指针和所指向的对象之间的区别感到困惑。 a和x是指针。想象一张写有聚会地址的纸。
int *a = new int;在堆上分配一个新对象并将地址分配给指针a。这就像在家里举办聚会,然后将地址写在一张名为 的纸上a。
return a;将指针返回给调用者。这就像将地址纸交给告诉您开始聚会的人。
*x = 10;访问对象并修改它。这就像去纸上的地址,传递愚蠢的帽子,你已经把它变成了化装舞会。
delete x; // do I need this?是的,您需要删除您分配的对象。这表示“在本文中的地址结束聚会”。
what if I don't delete memory?然后聚会将永远继续下去,并且没有其他人可以再次在该地址聚会,因为第一个聚会仍在进行。
what if I delete the memory twice?两次结束聚会是没有意义的。可能什么也不会发生。否则它可能会烧毁。或者每次可能都不一样。
what if I use the pointer after deleting it?去参加一个已经结束的聚会是没有意义的。也许什么也没有发生。或者也许有人用军事基地取代了房子,而你非法侵入并被逮捕。或者每次可能都不一样。
what if I reassign the pointer without deleting?如果你擦掉这张纸并在上面写上新的地址,这对聚会没有任何影响。只是你可能再也找不到它了,而且聚会永远继续下去。
I was told that members of classes are destroyed when the class is destroyed. Does that delete the object?不,烧掉那张写有地址的纸并不能结束聚会。
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |