句柄和指针的困惑~

来源:百度知道 编辑:UC知道 时间:2024/05/16 17:23:39
有人说对象的在内存中的地址是不固定的,操作系统会自动移动对象,所以不能用指针来访问,既然如此,为什么我们还经常使用指针?如果指针真的好用,可以直接访问对象,那么为什么还要句柄?
请具体说一下句柄和指针各在什么时候用?
恳请帮助解决兄弟的困惑,有高分相送哦~

指针保存的就是一个对象的地址,通过这个地址你可以访问这个对象的属性或方法,例如有一个CDC指针*dc,你可以调用dc->TextOut方法;再如,你使用
CBitpam *p=new CBitmap返回的就是一个指向CBitmap的对象;句柄跟这个不一样,例如你使用GlobalAlloc申请内存,返回的是一个句柄,这个句柄可能0x00000036,这个不是指针,是操作系统管理的一个对象,操作把这个0x00000036跟某个地址(例如是0x024F6579)绑定起来,你需要访问这个句柄对象时,操作系统会帮你检查你这个句柄的有效性,防止出现这个对象被delete后再访问时出现的非法访问;刚才的语句,你调用了delete p后,你一样可以调用p->xxx方法,但会出现非法访问。

指针指的地址是个逻辑内地址,你每个程序一启动windows就为程序分配了一套地址,每个程序的逻辑地址是分离的。这个地址应该不会移动的吧。。。