首页 > 解决方案 > 具有静态数据成员的对象的不同实例 - 可能吗?

问题描述

我想Data在客户端使用 2 个不同的实例,而不更改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

标签: c++

解决方案


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


推荐阅读