Я читаю «Думая на 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[]
Я запутался о количестве 1004. Почему это не 1000? В книге говорится:
Эти дополнительные четыре байта, где система хранит информацию о массиве, в частности, число объектов в массиве.
Но какая система? Как это достигается? Компилятор помогает здесь?
хорошо ... Я хочу знать, как вы просматриваете ссылку на часто задаваемые вопросы, когда у меня возникает вопрос? Кажется, мне нужно сначала повысить свою способность к поиску. :) – iBacchus