删除指针也会删除它所指向的内存吗?

Does deleting a pointer delete the memory it's pointing too?

本文关键字:删除 内存 指针      更新时间:2023-10-16

如果我有这样的指针:

int *test = new int;

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

int *test2 = test;

然后我删除test2

delete test2;

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

是的,当两个指针指向同一内存时,内存将

被删除

此外,test现在将是一个悬而未决的指针test2也是如此),取消引用它将导致未定义的行为

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

这是一个非常常见且非常不幸的用词不当,它传播和破坏了刚接触C++的人的思想:人们经常口语地谈论"释放指针"或"删除指针",而实际上你的意思是"释放我有一个指针的内存",或者"删除我有一个指针的对象"。确实,相关结构(即 std::freedelete )将指向相关实体的指针作为他们的参数,但这并不意味着指针本身是操作的 - 它只是传达感兴趣对象的位置