Разбор понятий: trivial type, standard layout, POD

от автора

Автор: Виталий Бутурлин

Содержание:

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

ссылка на оригинал статьи https://habr.com/ru/post/532972/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *