我正在閱讀「Thinking in C++」,我對這位新操作員感到困惑。下面是書中的代碼:爲什麼新的[]分配額外的內存?
//: C13:ArrayOperatorNew.cpp
// Operator new for arrays
#include <new> // Size_t definition
#include <fstream>
using namespace std;
ofstream trace("ArrayOperatorNew.out");
class Widget
{
enum { sz = 10 };
int i[sz];
public:
Widget() { trace << "*"; }
~Widget() { trace << "~"; }
void* operator new(size_t sz)
{
trace << "Widget::new: "
<< sz << " bytes" << endl;
return ::new char[sz];
}
void operator delete(void* p)
{
trace << "Widget::delete" << endl;
::delete []p;
}
void* operator new[](size_t sz)
{
trace << "Widget::new[]: "
<< sz << " bytes" << endl;
return ::new char[sz];
}
void operator delete[](void* p)
{
trace << "Widget::delete[]" << endl;
::delete []p;
}
};
int main()
{
trace << "new Widget" << endl;
Widget* w = new Widget;
trace << "\ndelete Widget" << endl;
delete w;
trace << "\nnew Widget[25]" << endl;
Widget* wa = new Widget[25];
trace << "\ndelete []Widget" << endl;
delete []wa;
} ///:~
,這裏是在「ArrayOperatorNew.out」
new Widget
Widget::new: 40 bytes
*
delete Widget
~Widget::delete
new Widget[25]
Widget::new[]: 1004 bytes
*************************
delete []Widget
~~~~~~~~~~~~~~~~~~~~~~~~~
Widget::delete[]
跟蹤的我感到困惑,爲什麼它不是1000號1004的內容?書中說:
這額外的四個字節就是的 系統保存有 陣列的信息,特別是在陣列中 對象的數量。
但是什麼是系統?這是如何完成的?編譯器在這裏幫助?
呃...我想知道如何在我有問題的同時搜索FAQ鏈接?看來我必須先提高自己的搜索能力。 :) – iBacchus 2009-11-13 09:53:11