Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Автор: Виталий Бутурлин
Содержание:
1. Trivial class
2. Standard layout
3. POD
4. Дополнительно
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