Технически вы можете переопределить оператор new (и удалить) и собрать информацию обо всей выделенной памяти, чтобы вы могли иметь способ проверить, действительно ли память кучи. но:
a) выделена память на этом адресе
b) память на этом адресе является начальным адресом объекта (например, адрес не находится в середине огромного массива)
c) память на этом адресе является начальным адресом объекта ожидаемого типа
. Нижняя строка: подход, о котором идет речь, не является способом C ++, вам необходимо определить некоторые правила, которые гарантируют, что функция получит действительные указатели.