簡體   English   中英

帶有字符串成員的類的 C++ 移動構造函數

[英]C++ move constructor for a class with string member

我用以下代碼編寫了一個類:

class Test {
public:
...
    Test( const Test &&that ) : i(that.i), s(std::move(that.s)) {
        cout << "move contructor." << endl;
    }
...
private:
    int i;
    std::string s;
};

如果我反匯編生成的代碼,我會看到:

        .type   Test::Test(Test const&&), @function
Test::Test(Test const&&):
...
       call    std::remove_reference<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type&& std::move<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
        movq    %rax, %rsi
        movq    %rbx, %rdi
.LEHB3:
        call    std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@PLT

basic_string<...>::basic_string( basic_string<...> const&)的調用讓我感到驚訝,因為我期望調用 basic_string basic_string<...>::basic_string( basic_string<...> &&)

我以不正確的方式實現了移動構造函數?

對 const 類型的右值引用不是很有用。 他們說代碼可以從對象中竊取,但必須在不改變其值的情況下這樣做?

由於std::string沒有string(const string&&)移動構造函數,因此重載解析只能使用string(const string&)復制構造函數。

普通的移動構造函數不使用const

Test( Test &&that ) : i(that.i), s(std::move(that.s)) {
    std::cout << "move constructor." << std::endl;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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