假设我有以下代码
foo* f = new foo();
std::cout << static_cast<void*>(f); //0xcf1c20
现在上面的代码f
指针指向地址0xcf1c20
。这是foo
实例的地址。我的问题是假设驻留在地址0xcf1c20
上面的上述实例没有被删除,实例是否会在整个应用程序的生命周期内始终存在于此内存地址中?或者是否存在同一实例可能放在不同的内存地址上的情况?
答案 0 :(得分:5)
这个特定的对象只要存在就会有相同的地址,是的。对象不会在内存中移动,除非您自己移动它们(或间接移动它们:例如,由于您操作容器而移动标准容器的元素)。
如果您完全了解所有这些情况,您可以安全地使用对象的地址作为其身份。
这并不代表其他foo
具有相同甚至类似的地址,即使是由相同的代码创建(例如,在函数或循环中)。只是在那个特定时间点创建了一个对象。
答案 1 :(得分:1)
在C ++中,地址在应用程序的整个生命周期内保持不变。
答案 2 :(得分:0)
在JAVA的情况下,我们不能自己释放对象,因为在java中我们有垃圾收集器,它负责释放没有引用的对象,也称为死对象,但在c中我们有这样的规定所以答案你的问题是肯定的。