/******************************************************************** 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 = 0; char *Mem1 = new ( ( MemCounter == LocalCounter ++ ) || AllFail ) char [ 32 ]; if ( Mem1 != NULL ) strcpy ( Mem1 , "First Memory" ); char *Mem2 = new ( ( MemCounter == LocalCounter ++ ) || AllFail ) char [ 32 ]; if ( Mem2 != NULL ) strcpy ( Mem2 , "Second Memory" ); int NumTimesLoop = 10; int LoopCounter = 0; // 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 = 0; LoopCounter < NumTimesLoop ; LoopCounter ++ ) { InnerMemory [ LoopCounter ] = new ( ( MemCounter == LocalCounter ++ ) || AllFail ) char [ 32 ]; } } int main() { for ( int counter = 0; counter < 12; counter ++ ) SimpleFunction ( counter , false ); SimpleFunction ( -1 , true ); return 0; }