【问题标题】:Overloading new() per class- rather than globally [duplicate]每个类重载 new() - 而不是全局[重复]
【发布时间】:2013-08-04 22:35:25
【问题描述】:

我知道重载全局 new 运算符你可以这样做,所有类都会使用它:

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() 的不同实现?

【问题讨论】:

  • 对我的问题的编辑并没有表明代码保持不变。在下面看到 Mats Petersson 的回复以及我的问题会更加清晰。

标签: c++ memory memory-management


【解决方案1】:

是的,只需声明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();
       }
    }
  };

我们完成了。

【讨论】:

  • 如果我希望每个类都使用我的问题中的实现,请全局声明它,然后对于我希望使用不同的任何类,只需执行您所做的并声明为静态?
  • @user997112:是的,应该可以。任何从 X 继承的类也将使用这个operator new,除非派生类中有一个。当然,你需要声明一个对应的delete,否则事情很快就会出错。
  • 'Static' 无论如何都是隐含的。你真正需要说的是“在课堂上声明”。
猜你喜欢
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
相关资源
最近更新 更多