/********************************************************************
created: 2014/03/17 18:53
filename: main.cpp
author: Justme0 (http://blog.csdn.net/justme0)
purpose: code project 内存管理
*********************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <new>
using namespace std;
// Overload the new operator
void *operator new ( size_t size , bool isAllocFailure )
{
if ( isAllocFailure )
return NULL;
else
{
try
{
void *Memory = ::operator new ( size );
return Memory;
}
catch ( std::bad_alloc )
{
return NULL;
}
}
return NULL;
}
// Overload placement delete operator so that exceptions from
// constructors can be handled
void operator delete ( void * Memory , bool isAllocFailure )
{
::delete Memory;
}
void SimpleFunction ( int MemCounter , bool AllFail )
{
int LocalCounter = ;
char *Mem1 = new ( ( MemCounter == LocalCounter ++ ) || AllFail ) char [ ];
if ( Mem1 != NULL )
strcpy ( Mem1 , "First Memory" );
char *Mem2 = new ( ( MemCounter == LocalCounter ++ ) || AllFail ) char [ ];
if ( Mem2 != NULL )
strcpy ( Mem2 , "Second Memory" );
int NumTimesLoop = ;
int LoopCounter = ;
// Create a Variable that will be allocate Inner Memory
char **InnerMemory = new ( ( MemCounter == LocalCounter ++ ) || AllFail ) char * [ NumTimesLoop ];
// Loop through and allocate the memory required
for ( LoopCounter = ; LoopCounter < NumTimesLoop ; LoopCounter ++ )
{
InnerMemory [ LoopCounter ] = new ( ( MemCounter == LocalCounter ++ ) || AllFail ) char [ ];
}
}
int main()
{
for ( int counter = ; counter < ; counter ++ )
SimpleFunction ( counter , false );
SimpleFunction ( - , true );
return ;
}