Вы можете воспроизвести то же поведение без потоков - выделить немного памяти, записать в нее, освободить и затем прочитать из нее - во многих случаях вы прочитаете ожидаемое значение.
Это потому, что во время операции delete
область памяти помечается как «свободная», а ее содержимое остается нетронутым. Таким образом, вы будете читать ожидаемое значение из него, пока оно не будет перераспределено и записано в другое место в программе. Нет никакого способа узнать, когда это произойдет, отчасти поэтому неопределенное поведение , т. Е. Не делайте этого.