I wrote a program out, which was all in one file, and the methods were forward declared in a header. The program initially worked perfectly when it was in one file. But when I separated the program, I kept getting random occurrences for the destructor of one of the classes which was declared in the header file.
I have a static variable in my header to count the number of objects of a particular class. Whenever I construct the object I increment this variable. Then in my destructor I subtract 1 from that variable, check if it’s 0 (meaning it’s the last object) and do something. The value seems to be off sometimes, I’m not sure why. I do have random calls in my application but I don’t see why that would effect what I have described above, thanks. Any help or insight is appreciated!
[Update]: have a base class, which contains the destructor.. which is implemented in the header, then I have two derived classes, which in their constructor increment the static var.. so what can I do?
What I am trying to do is the following: In my header I have this:
class A { public: virtual ~A() { count --; if (count == 0) { /* this is the last one, do something */ } } class B : public A { public: B(); }
Then in Class B I have
B::B() { count++; }
Where can I define count so I don’t get misleading counts? Thanks.
And then, in one and only one of your source files you need to put the following. It should go in the source file that contains the code for class A.
You need to do this, because the header file declared that there was going to be a variable named count, but didn’t allocate any storage for it. If you didn’t put it in a source file, the linker would complain that it wasn’t found.