如果我复制一个指针,然后要求删除指向的分配,这是有效的 C++,还是未定义的行为?
char* orig = new char[100];
char* copy = orig;
delete[] copy;
这是完全正确的。您正在取消分配在第一行分配的数组。
请注意,复制指针不会复制分配的数组。因此,您分配一个数组,然后释放一个数组,这样就没有剩余的数组了。
当您删除第二个指针时,它将删除分配的数组,但第一个指针指向相同的内存位置,因此它将成为悬空指针。
但不要忘记 orig 指向相同的内存,所以当你删除[]复制时,orig 指针也变得不可用......哦抱歉约瑟夫已经说过了。