9

如果我有这样的指针:

int *test = new int;

我创建了另一个指向这样的指针test

int *test2 = test;

然后我删除test2

delete test2;

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

4

2 回答 2

16

是的,记忆将是已删除当两个指针指向同一个内存时被释放。

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

于 2012-08-07T22:58:56.023 回答
7

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

这是一个非常常见且非常不幸的误称,它会传播和破坏 C++ 新手的思想:当您真正的意思是“释放我有指针”或“删除我有指针的对象”。确实,相关构造(即std::freedelete)将指向相关实体的指针作为参数,但这并不意味着指针本身被操作——它只是传达感兴趣对象的位置

于 2012-08-07T23:07:31.170 回答