new
и delete
перегрузка оператора может работать или не работать при компиляции с использованием разных компиляторов и разных стандартов С++. Это нормальное поведение?
Я использовал следующий код для тестирования компиляторов.
#include <iostream>
void * operator new(size_t size)
{
std::cout << "1\n";
return malloc(size);
}
void operator delete(void *ptr) noexcept
{
std::cout << "2\n";
free(ptr);
}
int main(void)
{
int *n1 = new int;
delete n1;
int *n2 = new int[10];
delete[] n2;
return 0;
}
Вот результаты, которые я получил от нескольких компиляторов, на которых я тестировал код.
mingw-w64 official build - x86_64-7.1.0-release-posix-seh-rt_v5-rev0.7z
c++11
1
2
c++14
1
clang x86_64 - v4.0.0, созданный вручную без исправлений с использованием компилятора выше
c++11 and c++14
1
2
msvc - набор инструментов платформы v141 и sdk v10.0.15063.0
/std:c++14 and /std:c++latest
1
2
1
2
Все тесты выполняются в Windows 7. Я не могу тестировать компиляторы на GNU/Linux OS, потому что у меня нет каких-либо виртуальных машин.