C++ 删除指向同一变量的指针

C++ 删除指向同一变量的指针,c++,pointers,memory-management,C++,Pointers,Memory Management,下面的代码是从一本书中摘录的代码的浓缩版本,其思想是创建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

下面的代码是从一本书中摘录的代码的浓缩版本,其思想是创建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赋值给变量是什么意思,但在这样做之前,它们的值不再指向已分配的内存,这当然不是一个坏主意。

是的:您分配的一项内容被删除。我不确定将NULL赋值给变量是什么意思,但在这样做之前,它们的值不再指向已分配的内存,这当然不是一个坏主意

如果我的理解是正确的,在临时指针上调用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;
是的,因为
ptr
num
指向完全相同的分配内存地址,
delete
操作符只需要该地址,它不关心哪个变量保存该地址

既然临时指针和num都是悬空指针,那么将它们都设置为NULL是否正确

不需要将它们设置为
NULL
(如果您使用的是C++11,则使用
nullptr
)。但是,如果您后来错误地使用了这些悬空指针,那么通过调试器,如果指针设置为
nullptr
,则更容易发现问题

如果我的理解是正确的,在临时指针上调用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;
是的,因为
ptr
num
指向完全相同的分配内存地址,
delete
操作符只需要该地址,它不关心哪个变量保存该地址

既然临时指针和num都是悬空指针,那么将它们都设置为NULL是否正确


不需要将它们设置为
NULL
(如果您使用的是C++11,则使用
nullptr
)。但是,如果您后来错误地使用了这些悬空指针,那么通过调试器,如果指针设置为
nullptr

您的代码是正确的,那么就更容易发现问题
delete
删除指向的对象(它不是基于指针的引用计数释放,或者类似的东西),您的代码是正确的
delete
删除指向的对象(它不是基于指针的引用计数释放,或者类似的东西)