C++:指针作为哈希表中的键

9

在程序运行期间,使用指针作为哈希表键是否存在问题?(不需要存储到磁盘并稍后再使用,因为这会引起明显的问题)

有许多情况下我需要快速知道一个对象是否属于某个对象管理器。一种快速检查的方法是将每个对象存储在哈希表中,其中对象的指针是实际对象的键:例如,HashTable。

3个回答

5

没有问题。这就像存储一个 int

指针具有不变的值,可以唯一地标识资源。

当然,如果您不好好使用指针,可能会出现问题,但这是另一件无关的事情。


实际上,指针比std::string更安全,因为后者是可变的。boost::hashstd::tr1::hash专门设计用于处理指针。但是内存管理可能会变得复杂。 - Fred Foo
我唯一看到的问题就是对齐。所有指针值都将指向相同类型的值,因此所有指针值都将是它的倍数。这意味着,如果对齐方式为2,哈希函数就是恒等函数,并且重新哈希策略是加倍,那么所有奇数位置都将未被使用。对齐越大,问题就越大。如果所指向的类型的对齐方式为8,则仅使用8的倍数位置。 - ABu

0

它应该工作得足够好。你有看到任何问题吗?也许你应该试一试看看。:)


0
从我的经验来看 - 如果你的哈希表指向的内存空间在删除指针所指向的内存空间的引用之前被释放,那么就会出现悬挂的内存泄漏问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接