具有静态数据成员的对象的不同实例是否可能?

时间:2018-05-23 08:33:42

标签: c++

我希望在客户端中使用2个不同的Data实例,而无需更改其成员中的static密钥或重置其成员的值。

struct Data
{
    static std::vector<int> vi;
};
struct DataUser
{
    DataUser(int s) {
        for (int i = 0; i < s; ++i)
        {
            Data::vi.emplace_back(i);
        }
    }
    int getSize() { return Data::vi.size(); }
};

std::vector<int> Data::vi(0);

//.............. use it
int main()
{
    {
       DataUser d1(5);
       std::cout << d1.getSize() << "\n";
    }
    {
        DataUser d2(10);
        std::cout << d2.getSize() << "\n";
    }
}

例如程序的输出是

5
15

我希望它是

5
10

1 个答案:

答案 0 :(得分:1)

static总是意味着在一个二进制文件中只有一个单独的实例。 拥有单独实例的唯一方法是在Data中拥有Data成员和非静态成员。