指针delete的作用

<span style="white-space:pre">	</span>int i=1;
	int *p=new int;
	*p=i;

	cout<<&p<<endl<<p<<endl<<*p<<endl;

	delete p;
	cout<<&p<<endl<<p<<endl<<*p<<endl;

做了一个小测试,代码如上所示。

得到的结果是这样的:

可以看到delete指针之后,如果再用*p,它还是有值的,所以为了避免出错,在delete之后,需要添加:p=NULL。

时间: 2024-10-24 17:03:19

指针delete的作用的相关文章

如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉

如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉 在STL中容器是智能的,可以在容器销毁时自动调用容器里对象的析构函数来销毁容器存储的对象. STL的容器虽然比较智能,但是没有智能到可以自动销毁new出来的指针对象. 所以在使用STL中的容器时,如果保存的是mew出来的对象的指针.如果在容器销毁之前没有把new出来的对象释放,会造成内存泄露. 解决方法版本一: 这种手工释放容器里new的对象不太可靠,菲异常安全的.如果在delete的时候爆出异常,那么还是会引起

有了函数名为什么还需要函数指针,函数指针有什么作用

声明一个函数可以用: 1. void function01(void); 2. void (*function02)(void); 第2个是用了函数指针,使用函数指针有两个好处: 1. 是可以动态设置内容,有灵活性.如:排序的qsort中需要传入比较的函数指针,来确定排序是从大到小还是从小到大: 2. 是可以具有封装特性,如结构体中可以包含函数指针,不同的结构体可以包含有相同名字的函数指针,这样不会导致冲突. 更详细的可以参考这篇文章:http://blog.csdn.net/wujianggu

堆栈指针 ---delete 使用

对拥有堆中一个有效对象的地址的指针进行删除操作的结果,是将这个堆内存的状态从“使用中” 变为“可用”(此时的可用就是指可以调用内存)释放了,可以再次覆盖此处;; 对指针内存进行删除操作后,指针本身的状态就是未定义的; *******可以是  大多数情况下:  依旧保存所删除的内存地址 我们的delete 仅仅是调用了析构函数,进行对打开对象的调用. 二,我们operator delete进行释放内存;; 因此我们使用的内存,变为仅仅的可用, 此时防止我们的误操作,我们一般将其定义为 NULL ;

Effective STL 第7条:如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉

STL中的容器相当"聪明",它们提供了迭代器,以便进行向后和向前的遍历(通过begin.end.rbegin等):它们告诉你所包含的元素类型(通过它们的value_type类型定义):在插入和删除的过程中,它们自己进行必要的内存管理:它们报告自己有多少对象,最多能容纳多少对象(分别通过size和max_size):当然,当它们自身被析构时,它们自动析构所包含的每个对象. 有了这么"聪明"的容器,许多程序员不再考虑自己做善后清理工作.更糟糕的是,他们认为,容器会考虑为

javascript 中delete 的作用是干啥的

js中的delete 跟 c,c++中的delete意思不一样, js中的delete只是删除对象的属性,但是该属性所指向的对象并不会被删除掉 var person = {}; var body = {"head":"one big head", hand = "two"}; person.body = body; delete person.body person的body属性被删除,但是body这个对象还存在,body对象会由于失去了引用而被

使用delete删除指针(转)

p所指的空间.比如 int* p = new int(1);delete p;就会在堆上分配一块内存,当作int类型使用,并赋值为1,将其地址储存在栈上的int*类型的p里.delete p会释放p所指向的内存.而这里p为一自动变量,其本身在程序退出其作用域时销毁. 用delete命令处理某个指针,说是把那个指针删除了是不正确的. delete命令指示释放了那个指针原本所指的那部分内存而已.被delete后的指针p的值(地址值)并非就是NULL,而是随机值. 也就是被delete后,如果不再加上

引用内部函数绑定机制,R转义字符,C++引用,别名,模板元,宏,断言,C++多线程,C++智能指针

 1.引用内部函数绑定机制 #include<iostream> #include<functional> usingnamespacestd; usingnamespacestd::placeholders; //仿函数.创建一个函数指针,引用一个结构体内部或者一个类内部的共同拥有函数 structMyStruct { voidadd(inta) { cout <<a <<endl; } voidadd2(inta,intb) { cout <&

Effective C++ 条款50 了解new和delete的合理替换时机

1. 替换标准库提供的operator new或operator delete通常基于以下三个理由: 1). 用来检测运行上的错误.将"new 所得内存"delete掉却不幸失败会导致内存泄露,多次对同一块"new所得内存"施行delete会导致未定义行为,如果让operator new持有一串动态分配所得地址,而operator delete将地址从中移走,就可以很容易检测出上述错误;各式各样的变成错误会导致数据"overruns"(写入点在分

C++11中智能指针的原理、使用、实现

目录 理解智能指针的原理 智能指针的使用 智能指针的设计和实现 1.智能指针的作用 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理.程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存.使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存. 理解智能指针需要从下面三个层次: 从较浅的层面看,智能指针是利用了一种叫做RAII(资