我是否需要删除在堆中创建的堆栈中的指针?

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吗?如果不这样做,会导致内存泄漏问题吗?

Moo*_*uck 6

您似乎对指针和所指向的对象之间的区别感到困惑。 ax是指针。想象一张写有聚会地址的纸。

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?不,烧掉那张写有地址的纸并不能结束聚会。