每个类重载new(),而不是全局重载

Overloading new() per class- rather than globally

本文关键字:重载 全局 new      更新时间:2023-10-16

我知道要重载全局新操作符,你可以这样做,所有类都会使用它:

void *operator new(size_t size){
    if(void *mem = malloc(size)){
        cout << "allocated memory" << endl;
        return mem;
    }
    else{
        throw bad_alloc();
    }
}

但是我如何在每个类的基础上重载new()?那么,类X、Y和Z的new()的不同实现呢?

是的,只需声明为static:

 class X
 {
    static void *operator new(size_t size) {
        if(void *mem = malloc(size)){
            cout << "allocated memory" << endl;
            return mem;
        }
        else{
           throw bad_alloc();
       }
    }
  };

我们完了。