【发布时间】:2020-04-04 20:03:18
【问题描述】:
调用 operator new 的局部重载会由于无限递归调用而导致堆栈溢出,但是当 operator delete 的局部重载也发生同样的情况时,为什么要调用全局 operator delete(从而避免堆栈崩溃)。 简单的代码是这样的-
class A {
public:
void * operator new(size_t n) {
//return new A();calls local overloaded version and stack overflows
return ::new A();
}
void operator delete(void* p)
{
delete(p);//why its calling global version?
//::delete(p);//calls global version
}
};
int main()
{
A *a = new A();
delete(a);
}
我的问题是,为什么重载运算符 delete 不调用自身,而是全局运算符 delete?
【问题讨论】:
标签: c++ delete-operator