【发布时间】:2021-07-29 12:34:45
【问题描述】:
如果您有一个指向容器中包含的对象的指针或引用,例如动态数组或哈希表/映射,则存在对象不会永久保留在那里的问题,因此似乎对这些对象的任何引用对象很快就会失效。例如,动态数组可能需要重新分配,而哈希表可能需要重新哈希,从而改变数组中存储桶的位置。
在像 Java(我认为是 C#)这样的语言中,可能是大多数语言,这可能不是问题。在这些语言中,很多东西都是引用而不是对象本身。您可以创建对动态数组的第三个元素的引用,基本上通过将引用复制到位于其他地方的对象来创建新引用。
但是在 C++ 中,动态数组或哈希表实际上会将对象直接存储在容器拥有的内存中,你应该怎么做?我创建的对象只有一个可以存在的地方。我可以通过在某处分配对象来创建对象,然后将指向该对象的指针存储在动态数组或哈希表或任何其他容器中。但是,如果我决定让容器成为这些对象的所有者,我会遇到指针或引用这些对象的问题。
对于像 std::vector 这样的动态数组,您可以使用索引而不是内存地址来引用数组中的对象。如果数组被重新分配,索引仍然有效。但是,如果我删除数组中的一个元素,我会遇到同样的问题,那么索引可能不再有效。
在哈希表之类的情况下,该表可能会动态重新哈希,从而更改存储桶中所有值的位置。每次您想要访问它时,引用哈希表值的唯一方法是搜索或哈希键吗?
有哪些方法可以引用这些容器或其他容器中的对象?
【问题讨论】:
标签: pointers reference dangling-pointer