转贴请指明作者
// tsm.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "new.h"
#include <malloc.h>
class IA
{
public:
virtual int GetVal() = 0;
};
class IAManager
{
public:
virtual int GetAllocIASize() = 0;
virtual IA * CreateIA( void * pMem ) =0 ;
};
class A1:public IA
{
public:
A1()
:aa( 10 )
{
}
int aa;
int GetVal(){ return 10;}
};
class A2:public A1
{
public:
A2()
{
ss[0] = 'y';
}
char ss[100];
int GetVal(){ return ss[0];}
};
class A2Manager: public IAManager
{
public:
virtual int GetAllocIASize()
{
return sizeof( A2 );
}
virtual IA * CreateIA( void * pMem )
{
return new( pMem ) A2;
}
};
void Ts()
{
A2Manager a2m;
void * pMem = ::_alloca( a2m.GetAllocIASize() );
IA *pIA = a2m.CreateIA( pMem );
int k = pIA->GetVal();
}
void Ts1()
{
char sz[900] = {0};
sz[800] = 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
Ts();
Ts1();
return 0;
}