如何在C++中获取对象的唯一标识符

如何在C++中获取对象的唯一标识符

给定系统中单个实体由一串数字或字母唯一标识符(UID)标识。 UID使得可以寻址该实体,并允许对其进行访问和交互。根据您的“唯一性”要求,有几个选择:

如果指针在一个地址空间内是唯一的(也称为“在一个程序执行内部”),并且您的对象在内存中保持不变,那么指针是可以接受的。然而,存在一些危险:如果您的对象被包含,每次重新分配都可能会改变它们的标识,如果您允许复制,则从函数返回的对象可能源自同一地址。

如果需要更高程度的全局唯一性,例如因为您正在使用通信应用程序或持久性数据,则可以使用GUID / UUID(例如boost.UUID)。您可以从静态计数器中制造唯一的数字,但要注意以下几点:

  • 确保您的增量是原子的。
  • 创建自定义复制构造函数或赋值语句以防止复制。

为了跟踪要使用的后续标识符,请使用静态变量。只要有一个能够产生唯一值的函数,您可以使用任何东西作为唯一标识符。在Example 8-8中,我们使用了static int,但您可以使用任何东西。

在此情况下,这些标识符不会被重用,直到int的最大容量达到。一旦对象被删除,其唯一值将丢失,直到重新启动程序或对象的标识符值达到其最大值并翻转。这个程序的单一性可能具有一些有趣的好处。

示例:

// C++ program to Get a Unique
// Identifier For The Object
#include <bits/stdc++.h>
#include <iostream>

// Creating the class
class Class1 {
protected:
    static int ID;

public:
    int id;
    Class1();
    Class1(const Class1& A);
    Class1& operator=(const Class1& A);
};

int Class1::ID = 0;

// Giving ID to the class
Class1::Class1() { id = ++ID; }

Class1::Class1(const Class1& A) { id = A.id; }

Class1& Class1::operator=(const Class1& A)
{
    id = A.id;
    return (*this);
}

int main()
{
    // Creation the 1st object of class1
    Class1 first;
    std::cout << first.id << std::endl;

    // Creation the 2nd object of class1
    Class1 second;
    std::cout << second.id << std::endl;

    // Creation the 3rd object of class1
    Class1 third;
    std::cout << third.id << std::endl;
    return 0;
}  
C++

输出

1
2
3
C++

解释: 在上面的程序中,我们创建了一个类并初始化了它的3个对象,并为每个对象赋予了唯一的ID,如输出所示。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册