删除间接指针是否正确
Is it correct to delete indirect pointer
我还是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[]
相关文章:
- std::vector::迭代器是否可以合法地作为指针
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 返回指向对象的指针的函数调用是否为 prvalue?
- 对象初始化中是否允许指向此成员的指针?
- 新分配指向函数的指针是否合法?
- 在函数结束后使用指向变量的指针是否安全?
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 是否可以使用函数指针调用虚拟析构函数?
- std::less是否应该允许在编译时比较不相关的指针?
- 是否允许编译器省略对指针的 &* 运算符的组合调用?
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 检查输入 std::array 指针数据是否等于某个常量数组
- 成员访问是否在空指针上定义C++?
- 如果只有 std::auto_ptr 可用,我是否仍应该使用智能指针?
- 是否可以使用指针访问变量以避免直接编辑变量?
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- "this"指针的值在对象的生存期内是否恒定?