Автор: Виталий Бутурлин
Содержание:
Trivial class
Тривиальные классы(trivial class) - это классы или структуры, в которых специальные функции-члены предоставляются компилятором (явно отсутствует реализация) либо явно заданы как default. В таком классенет управляющего кода, так как специальные функции-члены обьявлены (явно или неявно) тривиальными по умолчанию.
Кроме того есть дополнительные требования, тривиальный класс не должен иметь:
-
виртуальных функций
-
нетривиальных базовых классов
-
нетривиальных типов данных
Под словом "тривиальный" понимается наличие:
-
тривиальных специальных функций-членов (msdn)
-
POD членов(см. ниже)
Тривиальные классы могут быть безопасно скопированы функциями типа memcpy в полной точности.
Тривиальность функций членов (отсутсвие управляющего кода) подразумевает:
-
выделение памяти под обьект без инициализации
-
побайтовое копирование обьекта
-
освобождение памяти без очистки
Standard layout
Стандартная структура(standard layout) - это структура (struct), которая не содержит специальных возможностей C++:
-
виртуальные функции и виртуальные базовые классы
-
несколько уровней доступа (private, protected)
-
нестатические члены ссылочного типа
Стандартная структура:
-
не имеет члены являющиеся нестандартной структурой
-
не имеет базовые классы не являющиеся нестандартной структурой
-
не имеет более одного базового класса с нестатическими членами данных
-
не имеет двух мест обьявления нестатических членов (например в базовом классе и у себя)
-
не имеет более двух базовых (или косвенно) классов
Стандартная структура имеетпредсказуемое устройство памяти, так как не содержит данных, которые компилятор мог бы структурировать по своему усмотрению (например в случае наличия public/private/protected) -как написано так и храниться в памяти.
Автор: Виталий Бутурлин
Источник: https://byurrer.ru/konspektyi/razbor-ponyatij-trivial-standard-layout-pod.html