根据实例数自动设置ID

问题描述 投票:1回答:1

我的班上有一个简单的方法可以设置ID

void Instructor::setInstrID(const int newInstrID)
{
     instrID = newInstrID;
}

我希望代替手动设置id,而是制定一种方法,使Instructor的第一个实例自动获取ID 0,而在初始化第二个实例时,它应该自动具有Id = 1,依此类推。现在,我不确定如何执行此操作。

这应该在方法范围内吗?还是应该在我的main()函数中?如何检查是否存在任何现有实例?我曾想过制作一个矢量,但是那会在main()中,我真的不想这么做。有线索吗?

c++ class oop c++11 c++17
1个回答
3
投票

一种简单的解决方案是添加一个static成员,该成员计算已存在的实例数。

class foo
{
private:
    // Next ID to assign
    static unsigned int counter;

    // This instance's ID
    unsigned int instrID = counter++;
};

unsigned int foo::counter = 0;

如果创建的实例数超出unsigned int的代表数量,可能会遇到问题。只要实例被破坏的顺序几乎相同,就可以了。

如果要使用线程安全替代方法,则可以使用std::atomic<unsigned int>

© www.soinside.com 2019 - 2024. All rights reserved.