2
如果在用戶定義的對象上調用std::move()
會發生什麼情況,該對象不定義移動構造函數?它只是複製?如果移動一個沒有移動構造函數的對象會發生什麼?
如果在用戶定義的對象上調用std::move()
會發生什麼情況,該對象不定義移動構造函數?它只是複製?如果移動一個沒有移動構造函數的對象會發生什麼?
是的,移動將回落到複製。這就是像std :: vector這樣的標準容器如何在移動方面實現調整大小,但仍然與只能複製的類兼容。
但是,該類可能有一個隱式定義的移動構造函數 - 請參閱本指南。 http://en.cppreference.com/w/cpp/language/move_constructor#Implicitly-declared_move_constructor
你的意思是一個刪除的移動構造函數?因爲如果你自己沒有定義一個移動構造函數,並且所有的對象成員都有一個移動構造函數,那麼會生成一個平凡的移動構造函數。 – Cubic
請注意,'std :: move'本身對對象沒有任何作用。所以答案取決於上下文。例如,從對象移出可用於移動分配。或者完全不同的東西。所以它不完全依賴於可移動構造的類型 – juanchopanza
'std :: move'不動,'std :: forward'不轉發。 – Yakk