C++ 静态计数器没有正确增加

标签 c++

<分区>

Possible Duplicate:
Why does my destructor appear to be called more often than the constructor?

我有一个 static sCounterint id 来使用 id 对我的实例进行排序。

将它们分组到一个 vector 中时,效果很好。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 是一个私有(private)静态整数:static int sCount;

最佳答案

析构函数工作正常,但涉及插入东西的复制构造函数不会递增计数器。

只需实现显式复制构造函数来处理计数器。

关于C++ 静态计数器没有正确增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12788183/

相关文章:

c++ - 加速字节模式扫描 C++

c++ - 如何初始化静态本地 POD 常量?懒还是不懒?

C++ 将 RHEL4 32 位编写的应用程序迁移到 RHEL6 64 位

C++ new 后跟类

c++ - c++结构中的可选变量(变量结构)

c++ - 当构造函数抛出异常时删除运算符段错误

c++ - frame_dummy 在分析上下文中意味着什么?

c++ - 将 BSTR 存储在 std::vector 中?

c++ - Totalview:有没有办法硬编码断点?

c++ - 如何将 Switch Qml 添加到 qt widgets?