//
感谢[迷迷糊糊]提供_alloca我知
// _alloca的功能是在栈上动态分配空间
//
在栈空间不足的情况下会产生SEH异常,需要__try保护
//
不能对同一段代码同时采用SEH异常机制和C++异常机制,因此我使用异常规格指明构造函数不抛出异常
// 以下是一个完整的演示
#include
#include
#include
#include
using namespace std;
#define
EXCEPTION_STACK_OVERFLOW ((unsigned
long)0xC00000FDL)
int main( void )
{
struct
Test
{
int
i;
Test() throw() : i(1) { cout <<
"construct" << endl; }
~Test() throw() { cout << "destruct" << endl;
}
void print() throw() { cout << i << endl;
}
};
__try
{
Test& t1 = *new( _alloca( sizeof(Test) ) )
Test;
t1.print();
t1.~Test();
}
__except( EXCEPTION_STACK_OVERFLOW==GetExceptionCode() ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH )
{
cerr
<< "alloca fail.\n";
}
return
0;
}
阅读(1460) | 评论(9) | 转发(0) |