Хорошо.Теперь я лучше понимаю после прочтения Как передать аргумент unique_ptr в конструктор или функцию?
Что происходит в том, что в моем первом примере, где я передаю ссылку на rvalue, этоболее или менее похож на прохождение неконстантной lvalue ссылки .Хотя вы можете ожидать, что параметр будет пустым после вызова функции, гарантии нет.Все зависит от того, что на самом деле делает функция.При нажатии / перемещении его в вектор, как то, что я делаю здесь, unique_ptr будет пустым.Однако, если я не выполняю никаких действий (скажем, я просто вызываю метод класса IEvent), то unique_ptr не пуст.
Ссылочный параметр rvalue unique_ptr, следовательно, фактически не гарантирует что происходит со значением после вызова, т. Е. Является ли это приемником или нет.Он может быть пустым после звонка или не может быть.Только проверяя код, вы можете определить, что произойдет.
Я думаю, что в ретроспективе лучше определить определение второй функции, в котором он принимает значение unique_ptr по значению.Это гарантирует, что unique_ptr был перемещен и больше не должен использоваться впоследствии.