Я не знаю, почему компиляторы этого не делают, это кажется полезным.
Компилятор, безусловно, может связать бит данных с каждым указателем (выделенным с новым или выделенным с помощью malloc или неизвестным), и когда он обнаружит свободное или удаление, если распределение не соответствует, он может выдать предупреждение. Там не будет никаких накладных расходов при выполнении этого во время выполнения. Он не поймает всех ошибок, но поймает некоторые, так что будьте полезны.
Во время выполнения среда выполнения c ++ уже добавляет много дополнительной информации о некоторых компиляторах для определения переполнения буфера и т. Д. В сборках отладки, поэтому я не понимаю, почему он не может добавить флаг в блок памяти, чтобы сказать как это было распределено и как-то сообщать об ошибке, если она не работает.
Полагаю, реальный ответ в том, что на самом деле он вообще поймает много ошибок. Кажется, здесь каждый день возникает очень много вопросов с новым вопросом о смешивании new и malloc, и все же за 10 лет программирования я никогда не видел программы, которая бы это делала. Программы на C используют malloc, программы на c ++ используют new, и я почти никогда не видел их смешанными. Если вы используете C ++, вы просто используете новый для всего. Я думаю, что существует устаревший код, который изначально был C и был повторно использован в C ++, но я сомневаюсь, что этого достаточно, чтобы это стало большой проблемой в реальной жизни.
Кто-нибудь когда-нибудь имел проблемы с этим в реальной программе?