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