第二章空間配置器allocator


2.2.5節では、第1レベルのコンフィギュレータ_malloc_alloc_template

  
  
  
  
  1. template<int inst>  
  2. class __malloc_alloc_template  
  3. {  
  4. private:  
  5.     static void *oom_malloc(size_t);  
  6.     static void **oom_remalloc(void *, size_t);  
  7.     static void (*__malloc_alloc_oom_handler)();  
  8.  
  9. public:  
  10. .  
  11. .  
  12. .  
  13. }; 

ここでstatic void(*_malloc_alloc_oom_handler()は_malloc_alloc_oom_handler変数はstaticの関数ポインタであり、戻り値がvoidであり、パラメータが空の関数を指す.
クラスのpublicセクションには、次の関数があります.

  
  
  
  
  1. static void (*set_malloc_handler(void (*f)()))()  
  2. {  
  3.     void (*old)() = __malloc_alloc_oom_handler;  
  4.     __malloc_alloc_oom_handler = f;  
  5.     return (old);  

この関数名はset_ですmalloc_handler、値を返すときに関数ポインタ(void、パラメータが空)を返し、set_malloc_handlerのパラメータも関数ポインタ(同様にこの関数ポインタも戻り値void、パラメータが空のポインタ)であり、typedefを使用してこの書き方を簡略化することができます.
次のブログを参照してください:(関数ポインタの使用方法について)
http://blog.csdn.net/woyaowenzi/archive/2010/12/20/6086064.aspx

  
  
  
  
  1. typedef void(*TYPE)();  
  2. TYPE set_malloc_handler(TYPE)  
  3. {  
  4.     // ( )