删除指向同一变量的指针
Deleting pointers that point to the same variable
下面的代码是从一本书中提取的代码的精简版本,其想法是创建 ptr 变量的副本,然后将 ptr 变量指向不同的地址,最后删除临时指针。
如果我的理解是正确的,那么在临时指针上调用 delete 实际上会删除原始 num 变量吗?由于临时指针和 num 都是悬空指针,将它们都设置为 NULL 是否正确?
int *num = new int(5);
int num1 = 10;
int *ptr = num;
int *temp = ptr;
ptr = &num1;
delete temp;
temp = NULL;
num = NULL;
是的:您分配的一件事将被删除。 我不确定将 NULL 分配给变量是正确的意思,但是在这样做之前它们的值不再指向分配的内存,这当然不是一个坏主意。
如果我的理解是正确的,那么在临时指针上调用 delete 实际上会删除原始 num 变量吗?由于临时指针和 num 都是悬空指针,将它们都设置为 NULL 是否正确?
是的,因为ptr
&num
指向完全相同的分配内存地址,而delete
运算符只需要该地址,所以它并不关心哪个变量保存该地址。
由于临时指针和 num 都是悬空指针,将它们都设置为 NULL 是否正确?
不需要将它们设置为 NULL
(如果使用 C++11,请使用 nullptr
)。但是,如果您以后最终错误地使用了这些悬空指针,那么使用调试器,如果指针设置为 nullptr
,则更容易捕获问题。
相关文章:
- 将地址分配给本地指针后,公共对象的变量将消失
- 如果非动态变量被指针引用,何时超出范围?
- 在函数结束后使用指向变量的指针是否安全?
- 有没有将变量名称转换为双指针的简短方法?
- 成员变量指针的函数参数包
- C++ - 使用变量指针调用函数
- 如何返回值为NULL的变量指针
- 在编译时以增量方式构建变量指针的向量
- C 取消实例变量指针
- 每个方法调用上都覆盖了本地变量指针
- 决定对基类的变量指针进行函数调用
- 使用 valgrind 时获得 int 变量指针的无效读取大小错误
- 变量指针的成员函数未绘制到SDL_Surface?
- 何时使用成员变量指针
- 从成员变量指针返回布尔值
- 指向C#和C++之间接口的变量指针
- c++中指向self的成员变量指针
- 为什么变量指针包含相同数据类型的地址?
- 指向用户定义类型的类的全局变量指针
- C++分配一个变量指针地址