对象实例是否保留相同的内存地址

时间:2015-07-06 09:31:53

标签: c++

假设我有以下代码

  foo* f = new foo();
  std::cout << static_cast<void*>(f); //0xcf1c20

现在上面的代码f指针指向地址0xcf1c20。这是foo实例的地址。我的问题是假设驻留在地址0xcf1c20上面的上述实例没有被删除,实例是否会在整个应用程序的生命周期内始终存在于此内存地址中?或者是否存在同一实例可能放在不同的内存地址上的情况?

3 个答案:

答案 0 :(得分:5)

这个特定的对象只要存在就会有相同的地址,是的。对象不会在内存中移动,除非您自己移动它们(或间接移动它们:例如,由于您操作容器而移动标准容器的元素)。

如果您完全了解所有这些情况,您可以安全地使用对象的地址作为其身份。

这并不代表其他foo具有相同甚至类似的地址,即使是由相同的代码创建(例如,在函数或循环中)。只是在那个特定时间点创建了一个对象。

答案 1 :(得分:1)

在C ++中,地址在应用程序的整个生命周期内保持不变。

答案 2 :(得分:0)

在JAVA的情况下,我们不能自己释放对象,因为在java中我们有垃圾收集器,它负责释放没有引用的对象,也称为死对象,但在c中我们有这样的规定所以答案你的问题是肯定的。