【发布时间】:2023-04-10 06:57:02
【问题描述】:
我写了一个程序,它都在一个文件中,方法在头文件中前向声明。该程序最初在一个文件中时运行良好。但是当我分离程序时,我不断地随机出现在头文件中声明的类之一的析构函数。
我的标题中有一个静态变量来计算特定类的对象数。每当我构造对象时,我都会增加这个变量。然后在我的析构函数中,我从那个变量中减去 1,检查它是否为 0(意味着它是最后一个对象)并做一些事情。有时值似乎关闭,我不知道为什么。我的应用程序中确实有随机调用,但我不明白为什么这会影响我上面描述的内容,谢谢。感谢您提供任何帮助或见解!
[更新]:有一个基类,它包含在头文件中实现的析构函数..,然后我有两个派生类,它们在它们的构造函数中递增静态变量.. 那我该怎么办?
我想要做的是:在我的标题中我有这个:
class A {
public:
virtual ~A() {
count --;
if (count == 0) { /* this is the last one, do something */ }
}
class B : public A {
public:
B();
}
然后我在B班
B::B() {
count++;
}
我在哪里可以定义计数,这样我就不会得到误导性的计数?谢谢。
【问题讨论】:
-
有时不加起来的原因是编译器会自动为你生成复制构造函数。默认的复制构造函数不会增加 count 变量。