2016-11-05 7 views
0

В C++ можно ли вызвать функцию-не-член (либо свободную функцию, либо член других объектов) из деструктора? Я вызываю (не виртуальный, хотя в этом случае не имеет значения) метод объекта другого класса. Этот метод срабатывает при попытке доступа к своим членам.Вызывает функцию non-member от деструктора OK?

С другой стороны, если этот другой объект является дочерним объектом разрушенного объекта (Qt), это имеет значение?

+2

Почему это не должно быть в порядке? Ошибка должна быть где-то в другом месте. (Но обратите внимание, что в деструкторах не должно быть исключенных исключений). (И один класс, наследующий от другого, ничего не должен менять) – deviantfan

+0

Унаследованные объекты уничтожаются сверху вниз. Следовательно, попытка доступа к тому, что принадлежит унаследованному объекту в деструкторе базового объекта, является неопределенным поведением. – 101010

+1

Пока это не виртуальная функция, все должно быть хорошо. –

ответ

3

В общем деструктор может вызвать любую функцию, необходимую для правильного уничтожения объекта. Тем не менее, есть несколько предостережений:

  1. Если функция вызывается из деструктора бросает исключение, исключение должно быть перехвачены и обработаны в деструкторе.

  2. Функция, вызванная деструктором, не должна безоговорочно создавать и уничтожать объекты того типа, к которому принадлежит деструктор (поскольку это приведет к бесконечной рекурсии).