Как правильно запустить задачу из списка в потоке? [Дубликат]

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

Иногда вы можете просто забыть инициализировать .

Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.

121
задан fredoverflow 11 August 2011 в 15:19
поделиться

2 ответа

Перемещенные объекты существуют в неуказанном, но действительном состоянии. Это говорит о том, что, хотя объект может быть не способен больше делать, все его функции-члены должны по-прежнему демонстрировать определенное поведение & mdash; включая operator= & mdash; и все его члены в определенном состоянии - и это все еще требует уничтожения. Стандарт не дает конкретных определений, поскольку он будет уникальным для каждого UDT, но вы можете найти спецификации для стандартных типов. Некоторые подобные контейнеры относительно очевидны. они просто перемещают свое содержимое вокруг, а пустой контейнер - это четко определенное допустимое состояние. Примитивы не изменяют перемещенный объект.

Боковое примечание: я считаю, что это T c = std::move(a), так что если конструктор перемещения (или конструктор копирования, если нет перемещения), явствует, функция будет терпеть неудачу.

46
ответ дан JDługosz 4 September 2018 в 08:19
поделиться

17.6.5.15 [lib.types.movedfrom]

Объекты типов, определенные в стандартной библиотеке C ++, могут быть перемещены из (12.8). Операции перемещения могут быть явно указаны или неявно сгенерированы. Если не указано иное, такие перемещенные объекты помещаются в действительное, но неуказанное состояние.

Когда объект находится в неуказанном состоянии, вы можете выполнить любую операцию над объектом, который не имеет предпосылки. Если есть операция с предварительными условиями, которые вы хотите выполнить, вы не можете выполнить эту операцию напрямую, потому что не знаете, удовлетворяет ли условие неуказанного состояния предварительным условиям.

Примеры операций, которые обычно не имеют предварительных условий:

  • destroy
  • присваивание
  • const наблюдатели, такие как get, empty, size

Примеры операций, которые в целом имеют предварительные условия:

  • разыменование
  • pop_back

Этот ответ теперь появляется в видеоформате здесь: http://www.youtube.com/watch?v=vLinb2fgkHk&t=47m10s

98
ответ дан Howard Hinnant 4 September 2018 в 08:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: