Что такое нетривиальный деструктор в C++?
Я читал это, в котором упоминается, что деструкторы тривиальны и нетривиальны.
Класс имеет нетривиальный деструктор, если у него есть явно определенный деструктор или если у него есть объект-член или базовый класс, у которого есть нетривиальный деструктор.
Например, у меня есть класс,
class C {
public:
~C(); // not explicitly declared.
};
Если C::~C()
определен неявно, это делает trival dtor?
3 ответа
Вы перепутали свои слова. Ваш пример действительно объявляет явный деструктор. Вы просто забыли определить его, так что вы получите ошибку компоновщика.
Правило очень простое: есть ли у вашего класса явный деструктор? Если да, то вы нетривиальны. Если нет, проверьте каждый нестатический член-объект; если какой-либо из них нетривиален, то вы нетривиальны.
Таким образом, вы имеете в виду, вся декларация C
это:
class C { };
?
Тогда да: с C
не имеет объектов-членов и базовых классов, поэтому у него нет объектов-членов с нетривиальными деструкторами и нет базовых классов с нетривиальными деструкторами, поэтому его неявно определенный деструктор является тривиальным.
Я думаю, что в целом это относится к деструктору, который на самом деле делает что-то вроде:
- Освободить память
- Закрыть соединение с базой данных
- Или позаботьтесь о любом ресурсе, который должен быть освобожден
В этом случае деструктор ничего не делает. Согласно описанию, технически он может быть "нетривиальным", потому что он определяет конструктор, но это не имеет значения, поскольку он все равно ничего не делает.