为什么它不会进入无限循环

时间:2016-03-07 17:20:40

标签: c++ oop operator-overloading

我是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

请有人请就此提出建议。

1 个答案:

答案 0 :(得分:2)

您的程序不会进入无限循环,因为您在重载new运算符的new语句中使用了范围解析,这意味着您没有在此处调用自己的return operator new(sz);

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

{{1}}

我希望这会有所帮助。