太奇怪了 对象被删除 却不调用析构函数
用a类的静态成员函数Createit 创建几个b类连续的内存空间 再用Freeit删除它 去不调用b类析构函数源代码如下:
#include <stdio.h>
#include <tchar.h>
#include<windows.h>
class a
{
public:
a *data(){return this+1;}
static a* Createit(a*& head,UINT m,UINT n);
void Freeit();
};
a *a::Createit(a*& head, UINT m, UINT n)
{
head=(a*)new BYTE[sizeof(a)+m*n];
return head;
}
void a::Freeit()
{
a* p=this;
BYTE *p1=(BYTE*)p;
delete[] p1;
}
class b
{
public:
int x;
~b(){printf("对象被删除\n");} //至始至终没调用它
};
int _tmain(int argc, _TCHAR* argv[])
{
a* p=a::Createit(p,5,sizeof(b));
b *b1=(b*)p->data();
b *b2=b1+1;
b1->x=5;b2->x=6;
printf("b1->x=%d,b2->x=%d\n",b1->x,b2->x);
p->Freeit(); //删除对象
printf("b1->x=%d,b2->x=%d\n",b1->x,b2->x);
getchar();
return 0;
}