是否允许复制指针并在副本上调用删除?

问题描述 投票:0回答:3

如果我复制一个指针,然后要求删除指向的分配,这是有效的 C++,还是未定义的行为?

char* orig = new char[100];
char* copy = orig;
delete[] copy;
c++ undefined-behavior delete-operator
3个回答
9
投票

这是完全正确的。您正在取消分配在第一行分配的数组。

请注意,复制指针不会复制分配的数组。因此,您分配一个数组,然后释放一个数组,这样就没有剩余的数组了。


0
投票

当您删除第二个指针时,它将删除分配的数组,但第一个指针指向相同的内存位置,因此它将成为悬空指针。


-1
投票

但不要忘记 orig 指向相同的内存,所以当你删除[]复制时,orig 指针也变得不可用......哦抱歉约瑟夫已经说过了。

© www.soinside.com 2019 - 2024. All rights reserved.