I was going through a legacy code and found the following snippet:
MyClass::~MyClass() { EnterCriticalSection(&cs); //Access Data Members, **NO Global** members are being accessed here LeaveCriticalSection(&cs); }
I am wondering will it help by any chance to guard the destructor ?
Consider a scenario :
1. Thread1 - About to execute any of the member function which uses critical section 2. Thread2- About to execute destructor.
If the order of execution is 1=>2 then it might work. But what if the order is reversed ?
Is it a design issue ?
The destructor should not be called when the object is in use. If you’re dealing with such a situation, it needs a fundamental fix. However, the destructor might want to alter some other thing (which is unrelated to the class being destructed) and it might need a critical section (e.g. like decrementing a global counter).