可能重复:
为什么我的析构函数似乎比构造函数更频繁地被调用?
我有一个static sCounter
并int id
用 id 来订购我的实例。
将它们分组到向量中时,效果很好。ID 设置正确:
Task t("1st Task");
Task t2("2nd Task");
Task t3("3rd Task");
std::vector<Task> myTasks;
myTasks.push_back(t);
myTasks.push_back(t2);
myTasks.push_back(t3);
第一个任务的 ID 为 0,第二个:ID 1,第三个 ID 为 2。但是,如果我这样做:
std::vector<Task> myTasks;
myTasks.push_back(
Task("First Task"));
myTasks.push_back(
Task("Second Task"));
myTasks.push_back(
Task("Third Task"));
静态 sCount 值开始给出奇怪的结果:
第一个获得 ID 1,第二个也是 ID 1,第三个获得 ID 0。
为什么创建这样的对象会与静态计数器混淆?
sCounter 在构造函数上增加,在析构函数上减少:
int Task::sCount = 0;
Task::Task(std::string text) {
this->setText(text);
this->setStatus(1);
time_t now = time(0);
timestamp = *localtime(&now);
std::cout << "Count from " << sCount;
sCount++;
std::cout << " to --> " << sCount << "\n";
this->setID(); // set the current sCount to ID
}
Task::~Task() {
--sCount;
}
sCounter 是一个私有静态整数:static int sCount;