Должны ли все специальные функции-члены быть тривиальными, чтобы класс можно было легко копировать? ⇐ C++
-
Гость
Должны ли все специальные функции-члены быть тривиальными, чтобы класс можно было легко копировать?
На странице cppreference для именованного требования TriviallyCopyable в подразделе классов указано следующее требование:
Тривиально копируемый класс
Тривиально копируемый класс – это класс, который
[*]имеет хотя бы один подходящий конструктор копирования, конструктор перемещения, оператор присваивания копирования или оператор присваивания перемещения. [*]каждый подходящий конструктор копирования тривиален. [*]каждый подходящий конструктор перемещения тривиален. [*]каждый подходящий оператор присваивания копии тривиален. [*]каждый подходящий оператор назначения перемещения тривиален, и [*]имеет неудаляемый тривиальный деструктор.
Итак, если есть тривиальный копирующий оператор, но нетривиальный, скажем, оператор перемещения перемещения, разве класс не является тривиальным копируемым? Моя интуиция подсказывает, что если вы можете создать объект того же типа, тривиально скопировав существующий объект (или присвоив его с помощью memcpy созданному объекту) - это тривиальная копируемость.
На странице cppreference для именованного требования TriviallyCopyable в подразделе классов указано следующее требование:
Тривиально копируемый класс
Тривиально копируемый класс – это класс, который
[*]имеет хотя бы один подходящий конструктор копирования, конструктор перемещения, оператор присваивания копирования или оператор присваивания перемещения. [*]каждый подходящий конструктор копирования тривиален. [*]каждый подходящий конструктор перемещения тривиален. [*]каждый подходящий оператор присваивания копии тривиален. [*]каждый подходящий оператор назначения перемещения тривиален, и [*]имеет неудаляемый тривиальный деструктор.
Итак, если есть тривиальный копирующий оператор, но нетривиальный, скажем, оператор перемещения перемещения, разве класс не является тривиальным копируемым? Моя интуиция подсказывает, что если вы можете создать объект того же типа, тривиально скопировав существующий объект (или присвоив его с помощью memcpy созданному объекту) - это тривиальная копируемость.
Мобильная версия