我是一名c++初学者,最近学习了 new运算符重载。在相关的文章种看到了关于operator new函数的介绍。
其中主要代码如下:
void* operator new(size_t size) //针对new+对象
{
cout << "new" << endl;
return operator new(size);
}
当运行此代码后,会进入无限循环中
代码改为:
void* operator new(size_t size) //针对new+对象
{
cout << "new" << endl;
return ::operator new(size);
}
文章的解释是 ,我是对new进行的重载,调用opertor new函数会使进入循环,应将opertor new改为全局性质的 ::operator new(size)
我不理解的是,我明明是对new进行的重载,和opertor new函数有啥关系。为啥调用opertor new 会使代码进入循环?
operator new
虽然特殊,但它也是函数,你把它当成一个全局类的一个虚函数,你就明白为什么了。
void* operator new(size_t size) //针对new+对象
{
cout << "new" << endl;
return operator new(size);
}
就可以被认为是:
void* newsth(size_t size) //针对new+对象
{
cout << "new" << endl;
return newsth(size);
}
你说它递归不递归吧?