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

Jam*_*nco 0 c++

假设我有以下代码

  foo* f = new foo();
  std::cout << static_cast<void*>(f); //0xcf1c20
Run Code Online (Sandbox Code Playgroud)

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

Lig*_*ica 5

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

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

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