创建动态数组时静态成员(计数器)增加

时间:2015-12-12 17:46:04

标签: c++ arrays dynamic-arrays static-variables

假设我正在编写项目目录,其中每个项目都有唯一的ID。该id由自动增加的反静态变量确定,该变量初始化为零。我希望我的目录是一个动态数组。问题是,如果我创建一个大小为10的数组,我的静态计数器将在我创建并在此数组中放置任何对象之前增加到10。为什么会如此,我该如何避免呢?

我的示例代码:

#include <stdlib.h>
#include <iostream>
using namespace std;

class Item
{
private:
    int id;
public:
    static int next_id;
    Item();
};

int Item::next_id = 0;

Item::Item()
{
    id = Item::next_id++;
}

int main()
{
    Item* catalogue;
    catalogue = new Item[10];
    cout << Item::next_id << endl;
    system("pause");
    return 0;
}

输出是:

10

正如你所看到的,我没有创建任何Item对象,但next_id已经是10.所以如果我尝试创建一个Item对象,它的id将为11。

1 个答案:

答案 0 :(得分:3)

此处catalogue = new Item[10]; new运算符将调用Item10的构造函数,因此Item::next_id = 10