为什么它不会无限循环

Why it is not going in infinite loop

本文关键字:无限循环 为什么      更新时间:2023-10-16

我是 c++ 的新手,正在尝试一个运算符重载 new 和 delete 关键字的程序。在探索特定于类的重载示例时,我发现了以下程序。

#include <iostream>
// class-specific allocation functions
struct X {
    static void* operator new(std::size_t sz)
    {
        std::cout << "custom new for size " << sz << 'n';
        return ::operator new(sz);
    }
    static void* operator new[](std::size_t sz)
    {
        std::cout << "custom new for size " << sz << 'n';
        return ::operator new(sz);
    }
};
int main() {
     X* p1 = new X;
     delete p1;
     X* p2 = new X[10];
     delete[] p2;
}

我对上述程序正常工作的事实感到惊讶。由于我们正在为 new 和 delete 关键字编写自己的代码,同时我们也在使用它。根据我的想法,它应该进行无限循环。但它工作正常。请在下面找到结果。

custom new for size 1
custom new for size 10

请有人就此提供建议。

你的程序不会进入无限循环是因为你在重载new运算符的语句中使用范围解析return这意味着你没有在这里调用你自己的new

要使其进入无限循环,请将其更改为

return operator new(sz);

我希望这有所帮助。