Копирование и перемещение

138
13 октября 2019, 04:40

Когда лучше использовать копирование, а когда перемещение? (Когда большие объекты лучшие копировать(даже если дальше их не используем)?)

Всегда ли перемещение эффективнее копирования?

Answer 1

Когда лучше использовать копирование, а когда перемещение?

  • когда перемещение будет дешевле
  • когда объект не предусматривает копирования (например, файловый дескриптор)

(Когда большие объекты лучшие копировать(даже если дальше их не используем)?)

  • когда у нас хороший компилятор и он может применить rvo/nrvo (и подобное). В этом случае по факту не будет копирования.
  • с копированием иногда легче сделать "иммутабельность" - каждый поток владеет своей копией объекта - это бывает лучше, чем разделять объект с помощью объектов синхронизации (мютекстов)

Всегда ли перемещение эффективнее копирования?

В теории оно вроде так. Но на практике может быть все наоборот. Так как программист сам пишет конструкторы/операторы копирования/перемещения, то он может написать все, что угодно - например, добавить sleep(1000000) в оператор перемещения.

Также не стоит забывать, что многие вопросы производительности хорошо решает компилятор, если ему не мешать. Если раньше возврат объекта с функции грозил до двух копирований, и деструктором, то сейчас (с++17) это просто один конструктор, а иногда компилятор даже и его выбросит.

READ ALSO
Компиляция в Eclipse C++ (Linux)

Компиляция в Eclipse C++ (Linux)

подскажите как Вы компилируете в Eclipse?

119
Принцип работы функции getche()

Принцип работы функции getche()

Программа должна посчитать количество символов и слов в введённой строке, считывание осуществляется при помощи функции getche()

124
Как найти путь бинарного файла?

Как найти путь бинарного файла?

Исполняемое приложение подключает плагинКак внутри этого плагина узнать абсолютный путь по которому он лежит?

134
Удаление элементов вектора

Удаление элементов вектора

Подскажите, как корректно пройтись по вектору и удалить некоторые его элементыТ

135