[英]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.