Что такое нетривиальный деструктор в C++?

Я читал этой в котором упоминается, что деструкторы тривиальны и нетривиальны.

класс имеет нетривиальный деструктор, если он имеет явное определен деструктор, или если он имеет объект-член или базовый класс, который имеет нетривиальный деструктор.

например, у меня есть класс,

class C {
    public:
     ~C(); // not explicitly declared.
};

Если C::~C() неявно определено, делает ли он тривиальный dtor?

3 ответов


вы путаете свои слова. Ваш пример действительно объявить явный деструктор. Ты просто забываешь!--1-->определение это тоже, так что вы получите ошибки компоновщика.

правило очень прямолинейно: есть ли у вашего класса явный деструктор? Если да, то вы нетривиальны. Если нет, проверьте каждый нестатический объект-член; если любой из их нетривиальны, тогда вы нетривиальны.


Итак, вы имеете в виду всю декларацию C это:

class C { };

?

- тогда, да: с C не имеет объектов-членов и базовых классов, поэтому у него нет объектов-членов с нетривиальными деструкторами и нет базовых классов с нетривиальными деструкторами, поэтому его неявно определенный деструктор тривиален.


Я думаю, что в целом он относится к деструктор, который действительно что-то делает, например:

  • релиз
  • закройте соединение с базой данных
  • или позаботьтесь о любом ресурсе, который должен быть выпущен

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