В ранних версиях стандарта C 11 неявное создание конструкторов перемещения и операторов присваивания было тема дискуссии. Это привело к изменениям в последующих проектах, что привело к следующему поведению в доступных на данный момент компиляторах:
Начиная с ноябрьского выпуска стандарта C (N3225), конструкторы неявного перемещения и присваивания операторы могут быть сгенерированы при следующих условиях:
Решение не включать реализации конструктора/присвоения по умолчанию в ранние черновики было результатом опасений по поводу возможной путаницы и неожиданного поведения. Однако последующие версии решили эти проблемы, ужесточив условия для неявной генерации перемещения.
Если вы ищете способ использовать семантику перемещения без написания явных конструкторов перемещения/операторов присваивания. вы можете использовать [макрос GManNickG] (https://stackoverflow.com/a/12316884/8674521). Этот макрос генерирует необходимую семантику перемещения для вашего класса.
Реализуя семантику перемещения, вы также можете отказаться от предоставления функции-члена swap.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3