我正在阅读“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