Перемещение unique_ptr в той же инструкции, в которой он используется - PullRequest
0 голосов
/ 16 октября 2018

Безопасно ли делать что-то подобное?Я не уверен, гарантирован ли порядок выполнения или нет.

auto foo = std::make_unique<Foo>();
foo->Bar(std::move(foo));

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Делает ли что-то подобное безопасно?

Это работает так, как ожидалось стилем, не рекомендуется, поскольку объект foo по-прежнему доступен после его перемещения из.Это создает риск ошибок, связанных с доступом к перемещенному объекту.

0 голосов
/ 16 октября 2018

Это будет работать нормально.

Последовательность:

  1. Оценка std::move(foo), затем оценка foo-> (или наоборот, что не имеет значения, так как не изменяетсостояние указателя foo).
  2. Вызвать Foo::Bar(...) на целевом объекте, полученном в # 1, передавая foo приведенное к значению значение, также полученное в # 1.

Вероятно, не самый чистый стиль кода.

...