gpt4 book ai didi

c++ - 删除间接指针是否正确

转载 作者:搜寻专家 更新时间:2023-10-31 01:29:48 24 4
gpt4 key购买 nike

我对C++还是个新手,所以回答时请客气。当涉及到动态内存管理时,许多教程都给出了以下示例或类似内容,它们通常在同一范围内。

MyClass * pt;
pt = new MyClass[3];
delete[] pt;

我有一个问题,如果我失去了对原始动态分配变量的访问权限但只有它的地址怎么办。考虑以下内容

int* intP; //Global variable

void SomeFunction()
{
int* intP2 = new int;
*intP2 = 10;
intP = intP2;

//Some other actions.....and lost access to intP2 when this function ends
}


void SomeOtherFunction()
{
delete intP; //Valid?
}

最佳答案

这种行为是明确定义的:所有指向内存中相同位置的指针都可以删除。事实上,当您在函数内部构造对象时,同样的机制也在起作用,这是一个相当常见的场景:

MyClass *create(size_t size) {
MyClass *res = new MyClass[size];
... // Do something else
return res;
}
...
MyClass *array = create(100);
...
delete[] array;

这是上面发生的事情:

  • new 的结果分配给 res
  • 指针返回给调用者,而原始变量res超出范围
  • 你删除了array释放分配给 new [] 的内存并分配给res里面create()功能。

在另一个指针仍然可访问的情况下,在删除后取消引用另一个指针是非法的,例如:

int *data = new int[200];
int *copy = data;
...
delete[] copy;
// At this point it becomes illegal to dereference data[]

关于c++ - 删除间接指针是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com