我知道这可能不是世界上最好的设计,但是我对答案很感兴趣
没有任何实际原因。
假设我有两个带有重载新方法的类:
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 new
或Child::operator new
中工作。要在不使用类/命名空间成员的情况下分配和初始化对象,请使用
::new Child
除此之外……是的,成员
operator new
通常是一种严重的代码异味。