对拥有堆中一个有效对象的地址的指针进行删除操作的结果,是将这个堆内存的状态从“使用中” 变为“可用”(此时的可用就是指可以调用内存)释放了,可以再次覆盖此处;;
对指针内存进行删除操作后,指针本身的状态就是未定义的;
*******可以是 大多数情况下: 依旧保存所删除的内存地址
我们的delete 仅仅是调用了析构函数,进行对打开对象的调用。
二,我们operator delete进行释放内存;;
因此我们使用的内存,变为仅仅的可用,
此时防止我们的误操作,我们一般将其定义为 NULL ;
防止出现野指针,以及其他不能使用的内存地址使用的操作;;;
定义为 NULL 此时我们再操作(读取)此时的内存地址就会出现问题,但仅仅去赋值,赋予新的内存地址的时候,是不会存在问题的;
虽然delete 仅仅也是释放掉内存,与tmp逝去联系,但是并没有干掉指针 p ,因此还是存在误使用 指针p的操作;;
运行时错误的最多来源之一是内存泄露,如果程序分配了内存,但随后丢失了它的踪迹,导致既无法访问,又不能删除,没有被正确删除的对象,在进程终止之前将一直占据内存;;
(通常指向一个内存块的时候,这个指针变量需要再次指向别的堆内存,那么我们需要先delete,释放原先指定的内存地址,防止出现丢失的内存);;; 。。。
有些程序会长时间保持有效状态,假设这样的程序中包含一个经常要执行的例程,每次运行它时都会导致内存泄露,由于充满这些不可访问,未删除的内存块,堆会逐渐变得支离破碎,在某一刻,如果有例程需要大量的连续动态内存,就有可能拒绝这样请求,如果程序没有为处理这种事件做好准备,他就会中断
当销毁指针成员的时候,默认析构函数不会删除所分配的内存
时间: 2024-10-29 21:31:49