Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1997, Microsoft Corp. All rights reserved.
//
// FILE
//
// newop.cpp
//
// SYNOPSIS
//
// Implmentation of the global new and delete operators.
//
// MODIFICATION HISTORY
//
// 08/19/1997 Original version.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _NEWOP_CPP_
#define _NEWOP_CPP_
#include <cstdlib>
#include <new>
//////////
// CRT function that calls the new handler directly.
//////////
extern "C" int __cdecl _callnewh(size_t);
//////////
// Standard new operator.
//////////
void* __cdecl operator new(size_t size) throw (std::bad_alloc) { void* p;
// Loop until either we get the memory or the new handler fails.
while ((p = malloc(size)) == 0) { if (!_callnewh(size)) { throw std::bad_alloc(); } }
return p; }
//////////
// "No throw" version of the new operator.
//////////
void* __cdecl operator new(size_t size, const std::nothrow_t&) throw () { void* p;
// Loop until either we get the memory or the new handler fails.
while ((p = malloc(size)) == 0) { if (!_callnewh(size)) { return 0; } }
return p; }
//////////
// Delete operator.
//////////
void __cdecl operator delete(void *p) throw() { #ifdef DEBUG
// Clobber the memory.
if (p) memset(p, 0xA3, _msize(p)); #endif
// The MSVC free() handles null pointers, so we don't have to check.
free(p); }
#endif // _NEWOP_CPP_
|