В C ++ тривиальный деструктор является рекурсивно определенной концепцией - это деструктор, который компилятор написал для вас, когда у каждого члена класса (и каждого базового класса) есть тривиальный деструктор. (Существует похожая концепция, называемая тривиальным конструктором.)
Если в объект включен объект с нетривиальным деструктором (например, vector
в вашем примере), то деструктор внешнего объекта (например, Derived
) в нем больше не является тривиальным. Даже если вы не написали деструктор, компилятор C ++ автоматически написал деструктор, который вызывает деструкторы всех членов, у которых есть деструкторы.
Таким образом, даже если вы ничего не писали, все еще действуют предостережения о написании не виртуального деструктора.