Порядок вызова деструкторов определяется стандартом языка. Сначала выполняется деструктор дочернего класса, затем деструкторы членов дочернего класса и только потом родительские деструкторы (
https://isocpp.org/wiki/faq/dtors#order-dtors-for-...). Поэтому доступные данные и методы в родительском деструкторе ограничены родительским подобъектом и его родителями.
Родительский деструктор можно сделать тривиальным
~Parent() = default
(ничего не делать) или чистым виртуальным
virtual ~Parent() = 0
(не определен). Только во втором случае невозможно создавать объекты типа "Parent".