Attached is a single C++ source file with project file and solution file. Also attached is assembly output of one of the functions as viewed from internal IDE debugger of code compiled in release mode.
Issue seems to be caused by unmatched "sub esp,0Ch" in assembly: esp register being adjusted to make space for a temporary variable on stack but then the register is never adjusted back, causing "pop esi" to put incorrect value in esi register on return, causing "this" pointer of calling function to be corrupted.
This issue happens only in release mode. Some code generation settings make this issue go away so please refer to the attached project, thought default release mode settings should be affected as well.