删除指针是否会删除它指向的内存?

时间:2012-08-07 22:57:58

标签: c++ pointers memory-management

如果我有这样的指针:

int *test = new int;

我创建另一个指向test的指针,如下所示:

int *test2 = test;

然后我删除test2

delete test2;

这是否意味着它也会删除test的内存,或者我是否也必须调用delete test

2 个答案:

答案 0 :(得分:14)

是的,内存将被删除释放,因为两个指针都指向同一个内存。

此外,test现在将是悬空指针(与test2一样)并且取消引用它将导致未定义的行为

答案 1 :(得分:6)

您永远不会删除test的内存,也不会删除test2的内存。唯一被删除的是对象 *test,它与对象*test2相同(因为指针是相同的),所以你只能删除它一次。

这是一个非常普遍且非常不幸的用词,它会传播并破坏C ++新手的思想:当你真正意味着“释放内存”时,人们经常会说“释放指针”或“删除指针”。我有一个指针“,或”删除我有指针的对象“。确实,相关结构(即std::freedelete)将指向所讨论实体的指针作为它们的参数,但这并不意味着指针本身在操作上 - 它只是通信感兴趣对象的位置