[英]Understanding `std::move` in a constructor
我試圖了解std::move
的用法。 你能告訴我我的推理是否正確嗎? 我考慮以下 class:
class T{
public:
T(string s){
str = move(s);
}
string str;
};
現在讓我們考慮兩種使用這個 class 的方法。
T t("abc");
這里發生的是首先創建字符串"abc"
,然后將其資源移動到t.str
。 因此,永遠不會復制字符串"abc"
。
string s = "abc"; T t(s);
在這里,首先創建字符串s
。 然后將s
的副本按值傳遞給構造函數T()
。 最后, s
副本的資源被移動到t.str
。 總共"abc"
被復制一次。
這是真的?
在您的第一種情況下s
從 char 數組"abc"
初始化,然后s
的資源被移動到t.str
。 然后s
被銷毀。
在您的第二種情況下,第一個s
(為什么問這些問題的人總是對兩個不同的事物使用相同的變量名?)是從 char 數組"abc"
初始化的。 然后 function 參數s
通過復制構造從第一個s
開始初始化,然后 function 參數s
將其資源移動到t.str
,然后 ZC1C425268E68385D1AB507 參數s
被銷毀 794A
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.