如果我有这样的指针:
int *test = new int;
我创建了另一个指向这样的指针test
:
int *test2 = test;
然后我删除test2
:
delete test2;
这是否意味着它也会删除内存test
,还是我也必须调用delete test
?
如果我有这样的指针:
int *test = new int;
我创建了另一个指向这样的指针test
:
int *test2 = test;
然后我删除test2
:
delete test2;
这是否意味着它也会删除内存test
,还是我也必须调用delete test
?
是的,记忆将是已删除当两个指针指向同一个内存时被释放。
此外,test
现在 will 是一个悬空指针(就像 will 一样test2
)并且取消引用它会导致未定义的行为。
你永远不会删除记忆test
,也不会删除记忆test2
。唯一被删除的是object *test
,它与 object 相同*test2
(因为指针相同),因此您只能删除它一次。
这是一个非常常见且非常不幸的误称,它会传播和破坏 C++ 新手的思想:当您真正的意思是“释放我有指针”或“删除我有指针的对象”。确实,相关构造(即std::free
和delete
)将指向相关实体的指针作为参数,但这并不意味着指针本身被操作——它只是传达感兴趣对象的位置。