我知道这可能不是世界上最好的设计,但是我对答案很感兴趣
没有任何实际原因。

假设我有两个带有重载新方法的类:

class Base {
public:
operator void* new(size_t);
};

class Child : public Base {
public:
operator void* new(size_t); //THIS, i would like this to be the "original" new.
};

operator void* Base::new(size_t) {
//...
return new Child;
//...
}


我希望Child :: new像原始的new一样工作,因此我可以避免使用malloc。

有办法吗?

谢谢你!

最佳答案

您始终可以使用以下语法访问全局operator new

return ::operator new( sizeof Child );


注意一元范围运算符。此语法将忽略任何类和名称空间成员,并将在Base::operator newChild::operator new中工作。

要在不使用类/命名空间成员的情况下分配和初始化对象,请使用

::new Child


除此之外……是的,成员operator new通常是一种严重的代码异味。

10-08 08:56
查看更多