如何在C++中获取对象的唯一标识符
给定系统中单个实体由一串数字或字母唯一标识符(UID)标识。 UID使得可以寻址该实体,并允许对其进行访问和交互。根据您的“唯一性”要求,有几个选择:
如果指针在一个地址空间内是唯一的(也称为“在一个程序执行内部”),并且您的对象在内存中保持不变,那么指针是可以接受的。然而,存在一些危险:如果您的对象被包含,每次重新分配都可能会改变它们的标识,如果您允许复制,则从函数返回的对象可能源自同一地址。
如果需要更高程度的全局唯一性,例如因为您正在使用通信应用程序或持久性数据,则可以使用GUID / UUID(例如boost.UUID)。您可以从静态计数器中制造唯一的数字,但要注意以下几点:
- 确保您的增量是原子的。
- 创建自定义复制构造函数或赋值语句以防止复制。
为了跟踪要使用的后续标识符,请使用静态变量。只要有一个能够产生唯一值的函数,您可以使用任何东西作为唯一标识符。在Example 8-8中,我们使用了static int,但您可以使用任何东西。
在此情况下,这些标识符不会被重用,直到int的最大容量达到。一旦对象被删除,其唯一值将丢失,直到重新启动程序或对象的标识符值达到其最大值并翻转。这个程序的单一性可能具有一些有趣的好处。
示例:
输出
解释: 在上面的程序中,我们创建了一个类并初始化了它的3个对象,并为每个对象赋予了唯一的ID,如输出所示。