Вопрос о поведении unique_ptr при конкретном использовании std::move ⇐ C++
-
Anonymous
Вопрос о поведении unique_ptr при конкретном использовании std::move
Является ли следующий код на C++20 четко определенным или его поведение неопределенно в зависимости от операции упорядочивания?
#include #include использование пространства имен std; структура А { А(int i) : a_(i) {} int Foo(unique_ptr) { return a_; } интервал а_ = 0; }; интервал основной() { auto a_ptr = make_unique(10); cout Foo(std::move(a_ptr)) b (a перед b).
Означает ли это, что в данном случае a_ptr->Foo(std::move(a_ptr)) должен быть упорядочен как:
A* a_ptr_raw = a_ptr.operator->(); a_ptr_raw->Foo(std::move(a_ptr)); что сделает это более четким.
Является ли следующий код на C++20 четко определенным или его поведение неопределенно в зависимости от операции упорядочивания?
#include #include использование пространства имен std; структура А { А(int i) : a_(i) {} int Foo(unique_ptr) { return a_; } интервал а_ = 0; }; интервал основной() { auto a_ptr = make_unique(10); cout Foo(std::move(a_ptr)) b (a перед b).
Означает ли это, что в данном случае a_ptr->Foo(std::move(a_ptr)) должен быть упорядочен как:
A* a_ptr_raw = a_ptr.operator->(); a_ptr_raw->Foo(std::move(a_ptr)); что сделает это более четким.
Мобильная версия