创建动态数组静态成员(计数器)时增加
When creating dynamic array static member (counter) is increased
假设我正在编写一个项目目录,其中每个项目都有唯一的 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。
此处 catalogue = new Item[10];
new
运算符将调用 Item
class 10
的构造函数因此 Item::next_id = 10
假设我正在编写一个项目目录,其中每个项目都有唯一的 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。
此处 catalogue = new Item[10];
new
运算符将调用 Item
class 10
的构造函数因此 Item::next_id = 10