6

我想使用对象的实际指针地址(未标记为易失性)来唯一标识该对象。

这是一件坏事吗?一般来说,系统内存管理会移动对象,因此它的地址是关于还是指针稳定?

谢谢

4

5 回答 5

10

你的指针保证在它指向的对象的生命周期内保持稳定,除非你做一些事情来破坏它。操作系统确实确实在内存中移动了东西,但那是物理内存 - 操作系统提供给您的进程的虚拟内存空间将使东西保持在相同的地址。

于 2012-04-07T02:38:34.773 回答
4

在 C 中,对象的地址在其生命周期内是恒定的。请注意,根据 C 标准,realloc不会“移动”对象;它分配一个具有相同内容的新对象(对于新旧长度中较短的一个),如果成功,则释放旧对象。

于 2012-04-07T02:50:38.347 回答
4

指针是稳定的,但是,您应该正确使用指针,否则您的代码将不稳定。

指针在对象死亡之前一直有效,一旦对象死亡,您将拥有所谓的悬空指针

有很多方法可以避免悬空指针,其中一些是非常高级的主题。例如,您可以使用“句柄”,但这是一种更复杂的方法,并且需要与默认值不同的内存管理。

您使用的语言对于指针无效的方式也很重要。您的问题已标记为 C、C++ 和 Objective-C。在 C 中,您的指针可以通过 malloc 和 realloc 无效,而在 C++ 中,您的指针可以通过 delete 无效。

如果您是第一次被介绍,我强烈建议您阅读更多关于指针的内容,例如这篇文章

我还建议阅读更多内容std::shared_ptr

于 2012-04-07T02:58:34.947 回答
3

指向对象的指针在对象死亡(稳定)之前一直有效。

使用指针进行识别有其用途,但可能不是最好的做法。

于 2012-04-07T02:38:18.360 回答
3

iOS 内存管理不会移动对象。如果你有一个指向对象的指针,它在对象的生命周期内都是有效的。

在您的问题中,您指的是“指针地址”。但是我假设您的意思是指向对象的指针。否则这个问题的答案会变得更加复杂。

于 2012-04-07T02:40:44.117 回答