簡體   English   中英

在構造函數中理解`std::move`

[英]Understanding `std::move` in a constructor

我試圖了解std::move的用法。 你能告訴我我的推理是否正確嗎? 我考慮以下 class:

class T{
  public:
    T(string s){
        str = move(s);
    }
    string str;
};

現在讓我們考慮兩種使用這個 class 的方法。

  1. T t("abc");

這里發生的是首先創建字符串"abc" ,然后將其資源移動到t.str 因此,永遠不會復制字符串"abc"

  1. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM