Что делает неявно определенный деструктор

Что делает неявно определенный деструктор? Это просто пустая функция, определенная компилятором?

struct Foo
{
  int i;
};

struct Bar
{
  int i;
  ~Bar()
  { 
    // empty...
  }
};

Разрушение Фу идентично уничтожению Бара? Или неявный деструктор делает что-то внутри сгенерированного компилятором тела?


person Krystian S    schedule 11.12.2018    source источник


Ответы (1)


Что делает неявно определенный деструктор?

Это будет то же самое, что явно определенный деструктор с пустым телом. По сути, он уничтожает все подобъекты и больше ничего не делает.

Это просто пустая функция, определенная компилятором?

На практике может даже не быть пустой функции. Но может быть полезно думать, что есть, если думать в терминах абстрактной машины.

Или неявный деструктор делает что-то внутри сгенерированного компилятором тела?

Зависит от класса. В случае Foo деструктору ничего делать не нужно.

person eerorika    schedule 11.12.2018
comment
Вы могли бы хотеть пойти в тривиальность, и почему это важно. - person Deduplicator; 11.12.2018
comment
@Deduplicator Хорошо, деструктор Bar не тривиален, потому что он определяется пользователем, даже если он пуст. Технически нужно уничтожить Bar с помощью delete, а память Foo можно просто освободить, хотя деструктор Bar тоже ничего не делает. Что-нибудь еще? - person Peter - Reinstate Monica; 11.12.2018
comment
@PeterA.Schneider Технически необходимо вызвать dtor (что является частью того, что делает выражение удаления). И пользовательский код может сказать, является ли dtor тривиальным, и автоматически оптимизировать в этом случае. - person Deduplicator; 11.12.2018