如果您执行以下操作:
ClassType *foo = new ClassType();
ClassType *moo = foo;
delete foo;
然后继续前进,是否还有悬空指针?我认为不,因为您只声明了一个“新”,然后将其删除,但我想确定...
谢谢
如果您执行以下操作:
ClassType *foo = new ClassType();
ClassType *moo = foo;
delete foo;
然后继续前进,是否还有悬空指针?我认为不,因为您只声明了一个“新”,然后将其删除,但我想确定...
谢谢
您创建了一个对象并将其删除。您的两个指针仍指向该对象先前占用的内存地址,但该对象已被删除,通常这是悬空指针的公认定义 - 指向不再包含活动对象的某些内存。
没有内存泄漏,除非您尝试通过任一指针访问现在已删除的对象,否则您的程序不会导致问题。
使用 std::shared_ptr 或 std::unique_ptr 之类的东西可以帮助您以更安全的方式管理内存。
在 C++ 中,delete
运算符调用给定参数的析构函数,并将分配的内存new
返回给堆。时期。它什么也不做,这意味着您的指针指向堆上的某个位置,只是指向刚刚被取消分配的内存位置。所以那些指针变量仍然包含它之前指向的地址。这称为“悬空指针”。现在,如果您将 -moo
和分配foo
给NULL
after delete
,您将能够轻松识别您的指针是否指向有效位置或 NULL。
如果你的意思是悬空指针,是的,指针moo
和foo
现在无效,因为它指向已经被删除的东西。
foo和moo指向同一个动态对象,使用以下命令创建:
ClassType *foo = new ClassType();
因此,如果您删除foo , moo也会被“删除”,或者它变成一个空指针。