Короче говоря, delete[]
знает размер удаляемого массива, потому что это необходимо.
Поскольку стандарт языка C ++ утверждает, что он должен знать.Поэтому, когда вы выделяете массив, система должна сохранить размер где-нибудь, где delete[]
сможет его найти.
Один из вариантов - выделить на несколько байтов больше, чем нужно.Используйте первые байты, чтобы указать размер, а затем вместо того, чтобы возвращать указатель на первый выделенный байт, возвращайте указатель на первый байт после поля размера.
Тогда delete[]
просто нужно вычесть несколькобайтов от указателя для определения размера.
Другой вариант может иметь глобальный map<void*, int>
, где ключ - это указатель на выделение памяти, а значение - это размер этого выделения.Есть множество других способов узнать размер delete[]
.Стандарт C ++ не определяет, какой использовать.Это просто говорит о том, что delete[]
должен знать размер, и оставляет разработчикам возможность выяснить , как справиться с этим.