FREE Subscription to Dr. Dobb’s Digest: Same Great Content, New Digital Edition
Site Archive (Complete)
C++
Email
Print
Reprint

add to:
Del.icio.us
Digg
Google
Furl
Slashdot
Y! MyWeb
Blink
December 01, 1995

Smart Pointers for C++ Garbage Collection

(Page 6 of 6)
December 1995/Smart Pointers for C++ Garbage Collection/Listing 5

Listing 5 Runtime library patches to track working papers

////////////////////////////////////////////////////////////
// runtime.cpp                Copyright 1994 Gregory Colvin.
//                    Free distribution OK with this notice.
//

#include "runtime.h"

static new_handler cur_new_handler;
new_handler set_new_handler(new_handler cur) throw() {
   new_handler old= cur_new_handler;
   cur_new_handler = cur;
   return old;
}

static void* allocate_loop(size_t n) {
   void* p=0;
   for(;;) {
      p = allocate(n);
       if (p || !cur_new_handler)
         break;
      cur_new_handler( );
   }
   return p;
}

void* operator new(size_t n) throw (bad_alloc) {
   if (n == 0) n++;
   void* p= allocate_loop(n);
   if (!p)
      throw bad_alloc();
   return p;
}
void* operator new[](size_t n) throw(bad_alloc) {
   if (n == 0) n++;
   void* p= allocate_loop(n);
   if (!p)
      throw bad_alloc();
   return p;
}

void operator delete(void* p) throw() {
   deallocate(p);
}
void operator delete[](void* p) throw() {
   deallocate(p);
}

//End of File

Previous Page | 1 | 2 | 3 | 4 | 5 | 6
RELATED ARTICLES
No Related Articles
TOP 5 ARTICLES
No Top Articles.



MICROSITES
FEATURED TOPIC

ADDITIONAL TOPICS

INFO-LINK