如果我有这样的指针:
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)将指向相关实体的指针作为参数,但这并不意味着指针本身被操作——它只是传达感兴趣对象的位置。