需要理解的是这几个函数
set_new_handler(0); // 用来抛出bad_alloc异常
在vc6.0中找到set_new_handler()定义处:
// new standard header
typedef void (__cdecl *new_handler)();
new_handler __cdecl set_new_handler(new_handler) _THROW0();
可见 new_handler 是一个(__cdecl void *)(void) 的函数指针即:指向一个参数和返回值都为空的函数指针
而 set_new_handle() 是一个输入并返回 new_handler 的函数
_THROW0() 表示不会抛出异常
new_handle 将在new出错的时候时候被调用,去处理出错的指针,set_new_handle()返回值是没有调用前就已经存在的旧的处理函数指针。默认的new_handle 会抛出bad_alloc异常,new_handle=NULL也会抛出bad_alloc异常。set_new_handle()设置自定义的new_handle
::operator new((size_t)(size * sizeof(T)))
使用全局的new申请到size个T空间
new(p) T2(value); // placement new是用来实现定位构造的
new的第三种用法,即 在p指针指向的位置够找一个T2(value);
void main()
{
char s[sizeof(A)];
A* p = (A*)s;
new(p) A(3); //p->A::A(3); 如果没有这句,相当于没有调用拷贝构造函数
p->Say();
}