1、兩者區別
在引入右值引用,轉移構造函數,轉移復制運算符之前,通常使用push_back()向容器中加入一個右值元素(臨時對象)的時候,首先會調用構造函數構造這個臨時對象,然后需要調用拷貝構造函數這個臨時對象放入容器中。原來的臨時變量釋放。這樣造成的問題是臨時變量申請的資源就浪費。
引入右值引用,轉移構造函數后,push_back()右值時就會調用構造函數和轉移構造函數。在這上面有進一步優化的空間就是使用emplace_back,在容器尾部添加一個元素,這個元素原地構造,不需要觸發拷貝構造和轉移構造。而且調用形式更加簡潔,直接根據參數初始化臨時對象的成員。
參考:https://blog.csdn.net/MOU_IT/article/details/88757348