Bool - это четко определенный примитивный целочисленный тип, такой же как int, char и т. Д. Он также имеет математические преобразования в другие целочисленные типы, что иногда может сбивать людей с толку, но я не думаю, что это Ваше текущее замешательство.
Я не уверен, что вы находите замечательным в первом сегменте кода, который вы включили. Bools могут быть ссылками, как и все остальное. Похоже, вы смущены разницей между указателем и ссылкой там.
Что касается второго фрагмента кода, это немного сложно. это на самом деле утечка памяти, и если мы напишем ее по-другому, должно стать более понятно, что она делает:
bool myBool = (new bool) != 0 ? true : false;
Исходя из этого, вы можете видеть, что это делает, выделяет bool из кучи, затем сравнивает результат с NULL / 0 и использует результат этого сравнения для присваивания логическому значению. Обратите внимание, что значение, первоначально выделенное из кучи, просочилось. Я немного удивлен, что это не генерирует для вас ошибку компилятора, я подозреваю, что на некоторых компиляторах это будет.