Добрый день, господа.
Понадобилось в проекте заменить кучу на "кастомную".
Читаю
на cppreference про оператор delete []. Там есть такой код:
#include <iostream>
// sized class-specific deallocation functions
struct X {
static void operator delete(void* ptr, std::size_t sz)
{
std::cout << "custom delete for size " << sz << '\n';
::operator delete(ptr);
}
static void operator delete[](void* ptr, std::size_t sz)
{
std::cout << "custom delete for size " << sz << '\n';
::operator delete(ptr);
}
};
int main() {
X* p1 = new X;
delete p1;
X* p2 = new X[10];
delete[] p2;
}
Possible output:
custom delete for size 1
custom delete for size 18
Под убунтой с GCC этот код работает. Все ок. Вот, например, на ideone.com:
https://ideone.com/KxXjuG
А вот в Cтудии какой-то бред:
custom delete for size 1
custom delete for size 1
Онлайн студийный компилятор с тем же примером:
rextester.com/QUKDSZ7278
Как быть? Необходимо измерять размер кучи. Но если в delete[] попадает какой-то бред вместо размера, то измерения получаются бессмысленными. Где я затупил?
PS: при этом в operator new [], если его дописать, попадает правильный размер массива + sizeof указателя.