我想将实际指针地址(未标记为volatile)用于对象以唯一地标识对象。
这是一件坏事吗?一般来说,系统内存管理是否会移动对象,因此它的地址是关于指针还是指针稳定?
由于
答案 0 :(得分:9)
您的指针保证在指向的对象的生命周期内保持稳定,除非您做了一些事情来破坏它。操作系统确实在内存中移动了一些东西,但那是物理内存 - 操作系统为您的进程提供的虚拟内存空间将使事物处于相同的地址。
答案 1 :(得分:4)
在C中,对象的地址在其生命周期内是不变的。请注意,根据C标准,realloc
不会“移动”对象;它分配一个具有相同内容的新对象(对于旧长度和新长度的较短者),如果成功,则释放旧对象。
答案 2 :(得分:4)
指针是稳定的,但是,你应该正确使用指针,否则代码会不稳定。
指针在对象死亡之前一直有效,一旦对象死亡,你将拥有所谓的Dangling Pointer。
有许多方法可以避免悬空指针,其中一些是非常高级的主题。例如,您可以使用“Handles”,但这是更复杂的方法,并且需要与默认值不同的内存管理。
您使用的语言对于指针无效的方式也很重要。您的问题标记为C,C ++和Objective-C。在C中,你的指针可以被malloc和realloc无效,在C ++中你的指针可以被删除无效。
如果你第一次被介绍,我强烈建议你阅读更多指针,例如this article。
我还建议您阅读更多std::shared_ptr。
答案 3 :(得分:3)
指向对象的指针在对象死亡(稳定)之前有效。
使用指针进行识别有其用途,但可能不是最好的选择。
答案 4 :(得分:3)
iOS内存管理不会移动对象。如果你有一个指向对象的指针,那么它对于对象的生命周期是有效的。
在你的问题中,你指的是“指针地址”。但是我假设你的意思是指向对象的指针。否则,这个问题的答案会变得更复杂。