2
我是新來的c + +,並試圖運營商重載新和刪除關鍵字的程序。在探索類特定的重載示例時,我發現了下面的程序。爲什麼它不會在無限循環
#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;
}
令人驚訝的是,上述程序正在運行。由於我們正在爲新的和刪除關鍵字編寫自己的代碼,同時我們也在使用它。我的想法應該是無限循環。但它工作正常。 請在下面找到結果。
custom new for size 1
custom new for size 10
請有人請在此建議。
你不用':: operator new(sz);'......來調用你自己的操作符new ...參見:http://stackoverflow.com/questions/4269034/what-is-the-meaning-of-prepended -double-colon – gurka
我不禁想知道爲什麼,如果你對這門語言很陌生,你想從一開始就玩大多數C++程序員在他們的生活中從未碰過的功能...... –
恭喜你扭轉了無限的通常形式循環問題,這是「爲什麼我的代碼永遠不會退出循環?」 –