C++静态计数器未正确增加
C++ static counter not increasing correctly
可能的重复项:
为什么我的析构函数似乎比构造函数更频繁地被调用?
我有一个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 增加,析构函数上的 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 是一个私有静态 int: static int sCount;
析
构函数工作正常,但参与推动内容的复制构造函数不是递增计数器。
只需实现显式复制构造函数来照顾计数器。
在第二种情况下,传递给push_back的每个 Task 实例都是一个临时变量。这意味着一旦对 push_back 的调用完成,就会调用其析构函数。然后,析构函数在创建下一个任务之前递减计数器。
myTasks.push_back( Task("First Task") ); // Task's destructor is called before the next line
尽管 Task 被复制到向量中(因此数据存在于内存中的其他位置),但 std::vector 用于此目的的隐式复制构造函数不会递增计数器。
相关文章:
- 数组索引的值没有增加
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 为什么我的代码在输出中增加了93天
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- 当我在C++中增加私有静态变量时,程序会抛出错误
- 为什么将鼠标悬停在静态 Win32 控件上会增加内存并删除我的 GUI?
- 静态变量不增加
- C++在多个文件单元中链接相同的静态库会增加大小/膨胀
- C++静态计数器未正确增加
- 为什么生成pdb文件会导致静态链接库的大小大幅增加
- 创建动态数组时,会增加静态成员(计数器)
- 静态成员函数会给类增加一个开销
- 不能在静态类函数中增加静态变量