Article ID: 128805
Article Last Modified on 7/5/2005
~MyClass(2D0340) i=0, after ptr->~MyClass() ~MyClass(2D134C) i=1, after ptr->~MyClass() ~MyClass(2D1354) i=2, after ptr->~MyClass() ~MyClass(2D135C) i=3, after ptr->~MyClass() ~MyClass(2D1364) MyClass::operator delete(2D1364) i=4, after ptr->~MyClass() ~MyClass(2D136C) MyClass::operator delete(2D136C) i=5, after ptr->~MyClass() out of the loop, i=4227241To see the correct output, compile the code with the /D "GOOD_CODE" compiler option.
/* Compile options needed: none
*/
#include <stdio.h>
class MyClass
{
public:
void operator delete(void *ptr)
{
printf("\nMyClass::operator delete(%lX)", (long)ptr);
}
virtual ~MyClass()
{
printf("\n~MyClass(%lX)", (long)this);
}
};
void main(void)
{
int i;
MyClass *ptr;
int j;
for (i=0; i < 100; i++)
{
ptr = new MyClass;
j = 1; // Used to put '1' onto the stack
#ifndef GOOD_CODE
// This call corrupts the stack, and "accidentally"
// calls delete()
ptr->~MyClass();
#else
// This call works fine
ptr->MyClass::~MyClass();
#endif
printf("\ni=%d, after ptr->~MyClass()", i);
fflush(stdout);
}
printf("\nout of the loop, i=%d", i);
}
Additional query words: 1.00 2.00 2.10 8.0 8.00 9.0 9.00 9.1 9.10
Keywords: kbbug kbfix kbcpponly kbcompiler KB128805