如果我有这样的指针:
int *test = new int;
我创建另一个指向test
的指针,如下所示:
int *test2 = test;
然后我删除test2
:
delete test2;
这是否意味着它也会删除test
的内存,或者我是否也必须调用delete test
?
答案 0 :(得分:14)
是的,内存将被删除释放,因为两个指针都指向同一个内存。
此外,test
现在将是悬空指针(与test2
一样)并且取消引用它将导致未定义的行为。
答案 1 :(得分:6)
您永远不会删除test
的内存,也不会删除test2
的内存。唯一被删除的是对象 *test
,它与对象*test2
相同(因为指针是相同的),所以你只能删除它一次。
这是一个非常普遍且非常不幸的用词,它会传播并破坏C ++新手的思想:当你真正意味着“释放内存”时,人们经常会说“释放指针”或“删除指针”。我有一个指针“,或”删除我有指针的对象“。确实,相关结构(即std::free
和delete
)将指向所讨论实体的指针作为它们的参数,但这并不意味着指针本身在操作上 - 它只是通信感兴趣对象的位置。