billroper: (Default)
[personal profile] billroper
I figured out the source of yesterday's problem.

I had put in a forward definition for a class in a header file so that I could declare a pointer to an object of that type inside the class that was defined in the header file. Like this:

class AnotherClass;

class ThisClass
{
...
  AnotherClass*   anotherClassInstance;
};


When I destroy ThisClass, I want to destroy the instance of AnotherClass that it contains. No problem. I'll just call delete on the pointer like this:

delete anotherClassInstance;


That should work just fine.

Except it didn't. Because I hadn't actually included the header file for AnotherClass in the .cpp file for ThisClass. What I would have expected was that this should have produced a compile error telling me that I was operating on a class that hadn't been completely defined.

But there was no compile error. Instead, the Visual Studio compiler just called delete on anotherClassInstance like it was a pointer to a random chunk of memory with no destructor.

Hilarity ensued.

Well, at least I should remember what caused me to waste so much time the next time I run into this problem...

*grumble*

Date: 2017-03-31 01:29 pm (UTC)
bedlamhouse: (Default)
From: [personal profile] bedlamhouse
A compiler that assumes at run time such things would be properly in place? Never!

Profile

billroper: (Default)
billroper

January 2026

S M T W T F S
     1 23
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 3rd, 2026 05:26 pm
Powered by Dreamwidth Studios